LogUtils.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package com.jkcredit.invoice.util;
  2. import com.alibaba.fastjson.JSONObject;
  3. import org.apache.commons.codec.binary.Base64;
  4. import javax.crypto.Cipher;
  5. import javax.crypto.spec.SecretKeySpec;
  6. import java.io.UnsupportedEncodingException;
  7. import java.net.URLDecoder;
  8. import java.security.Key;
  9. /**
  10. * Created by Administrator on 2017/11/25.
  11. * base64加解密工具类
  12. */
  13. public class LogUtils {
  14. private static final String PASSWORD_CRYPT_KEY = "3cm.xin.";
  15. private static final String MOBILE = "mobile";
  16. private static final String NAME = "name";
  17. private static final String ID_NUMBER = "id_number";
  18. private static final String IDCARD = "idcard";
  19. private static final String BANK_CARD_NUMBER = "bank_card_number";
  20. private static final String BANK_NO = "bank_no";
  21. private static final String UTF = "UTF-8";
  22. private static final int EIGHT = 8;
  23. /**
  24. * @param data
  25. * @return
  26. * @throws Exception
  27. */
  28. public static String decode(String data) throws Exception {
  29. JSONObject object = JSONObject.parseObject(data);
  30. if(object.get(MOBILE) != null) {
  31. object.put(MOBILE, decryptDes(object.getString(MOBILE)));
  32. }
  33. if(object.get(NAME) != null) {
  34. object.put(NAME, decryptDes(object.getString(NAME)));
  35. }
  36. if(object.get(ID_NUMBER) != null) {
  37. object.put(ID_NUMBER, decryptDes(object.getString(ID_NUMBER)));
  38. }
  39. if(object.get(IDCARD) != null) {
  40. object.put(IDCARD, decryptDes(object.getString(IDCARD)));
  41. }
  42. if(object.get(BANK_CARD_NUMBER) != null) {
  43. object.put(BANK_CARD_NUMBER, decryptDes(object.getString(BANK_CARD_NUMBER)));
  44. }
  45. if(object.get(BANK_NO) != null) {
  46. object.put(BANK_NO, decryptDes(object.getString(BANK_NO)));
  47. }
  48. return object.toString();
  49. }
  50. /**
  51. * 二进制数据编码为BASE64字符串
  52. *
  53. * @param data
  54. * @return
  55. * @throws Exception
  56. */
  57. public static String encode(String data) {
  58. try {
  59. data = URLDecoder.decode(data, "utf-8");
  60. JSONObject object = JSONObject.parseObject(data);
  61. if(object.get(MOBILE) != null) {
  62. object.put(MOBILE, encryptDes(object.getString(MOBILE)));
  63. }
  64. if(object.get(NAME) != null) {
  65. object.put(NAME,encryptDes(object.getString(NAME)));
  66. }
  67. if(object.get(ID_NUMBER) != null) {
  68. object.put(ID_NUMBER, encryptDes(object.getString(ID_NUMBER)));
  69. }
  70. if(object.get(IDCARD) != null) {
  71. object.put(IDCARD, encryptDes(object.getString(IDCARD)));
  72. }
  73. if(object.get(BANK_CARD_NUMBER) != null) {
  74. object.put(BANK_CARD_NUMBER, encryptDes(object.getString(BANK_CARD_NUMBER)));
  75. }
  76. if(object.get(BANK_NO) != null) {
  77. object.put(BANK_NO, encryptDes(object.getString(BANK_NO)));
  78. }
  79. return object.toString();
  80. } catch (UnsupportedEncodingException e) {
  81. e.printStackTrace();
  82. }
  83. return data;
  84. }
  85. /**
  86. * 加密数据
  87. * @param encryptString 注意:这里的数据长度只能为8的倍数
  88. * @return
  89. * @throws Exception
  90. */
  91. public static String encryptDes(String encryptString) {
  92. try {
  93. StringBuffer sb = new StringBuffer();
  94. sb.append(encryptString);
  95. for (int i = 0; i < EIGHT - encryptString.getBytes(UTF).length % EIGHT ; i++) {
  96. sb.append("=");
  97. }
  98. encryptString = sb.toString();
  99. SecretKeySpec key = new SecretKeySpec(getKey(PASSWORD_CRYPT_KEY), "DES");
  100. Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
  101. cipher.init(Cipher.ENCRYPT_MODE, key);
  102. byte[] encryptedData = cipher.doFinal(encryptString.getBytes("UTF-8"));
  103. return Base64.encodeBase64String(encryptedData);
  104. } catch (Exception e) {
  105. // TODO: handle exception
  106. }
  107. return encryptString;
  108. }
  109. /***
  110. * 解密数据
  111. * @param decryptString
  112. * @return
  113. * @throws Exception
  114. */
  115. public static String decryptDes(String decryptString) throws Exception {
  116. SecretKeySpec key = new SecretKeySpec(getKey(PASSWORD_CRYPT_KEY), "DES");
  117. Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
  118. cipher.init(Cipher.DECRYPT_MODE, key);
  119. byte[] decryptedData = cipher.doFinal(Base64.decodeBase64(decryptString));
  120. return new String(decryptedData).replaceAll("=", "");
  121. }
  122. /**
  123. * 自定义一个key
  124. * @param keyRule
  125. */
  126. public static byte[] getKey(String keyRule) {
  127. Key key = null;
  128. byte[] keyByte = keyRule.getBytes();
  129. // 创建一个空的八位数组,默认情况下为0
  130. byte[] byteTemp = new byte[8];
  131. // 将用户指定的规则转换成八位数组
  132. for (int i = 0; i < byteTemp.length && i < keyByte.length; i++) {
  133. byteTemp[i] = keyByte[i];
  134. }
  135. key = new SecretKeySpec(byteTemp, "DES");
  136. return key.getEncoded();
  137. }
  138. public static void main(String[] args) throws Exception {
  139. String a = "{\"id_number\":\"36042919960907151X\",\"bank_card_number\":\"6214680048545055\",\"name\":\"刘玺\",\"mobile\":\"15991856264\",\"sign\":\"a93471e386fed0427c68bd6e9967011b\"}";
  140. System.out.println(encode(a));
  141. //String b = "{\"sign\":\"a93471e386fed0427c68bd6e9967011b\",\"id_number\":\"NjEyMzIzMTk5MjA5MDg0ODcy\",\"name\":\"5YiY5466\",\"bank_card_number\":\"NjIxNDY4MDA0ODU0NTA1NQ==\",\"mobile\":\"MTU4NzMwNTI4MzY=\"}";
  142. System.out.println(decode(encode(a)));
  143. }
  144. }