package com.jkcredit.invoice.util; import com.alibaba.fastjson.JSONObject; import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.security.Key; /** * Created by Administrator on 2017/11/25. * base64加解密工具类 */ public class LogUtils { private static final String PASSWORD_CRYPT_KEY = "3cm.xin."; private static final String MOBILE = "mobile"; private static final String NAME = "name"; private static final String ID_NUMBER = "id_number"; private static final String IDCARD = "idcard"; private static final String BANK_CARD_NUMBER = "bank_card_number"; private static final String BANK_NO = "bank_no"; private static final String UTF = "UTF-8"; private static final int EIGHT = 8; /** * @param data * @return * @throws Exception */ public static String decode(String data) throws Exception { JSONObject object = JSONObject.parseObject(data); if(object.get(MOBILE) != null) { object.put(MOBILE, decryptDes(object.getString(MOBILE))); } if(object.get(NAME) != null) { object.put(NAME, decryptDes(object.getString(NAME))); } if(object.get(ID_NUMBER) != null) { object.put(ID_NUMBER, decryptDes(object.getString(ID_NUMBER))); } if(object.get(IDCARD) != null) { object.put(IDCARD, decryptDes(object.getString(IDCARD))); } if(object.get(BANK_CARD_NUMBER) != null) { object.put(BANK_CARD_NUMBER, decryptDes(object.getString(BANK_CARD_NUMBER))); } if(object.get(BANK_NO) != null) { object.put(BANK_NO, decryptDes(object.getString(BANK_NO))); } return object.toString(); } /** * 二进制数据编码为BASE64字符串 * * @param data * @return * @throws Exception */ public static String encode(String data) { try { data = URLDecoder.decode(data, "utf-8"); JSONObject object = JSONObject.parseObject(data); if(object.get(MOBILE) != null) { object.put(MOBILE, encryptDes(object.getString(MOBILE))); } if(object.get(NAME) != null) { object.put(NAME,encryptDes(object.getString(NAME))); } if(object.get(ID_NUMBER) != null) { object.put(ID_NUMBER, encryptDes(object.getString(ID_NUMBER))); } if(object.get(IDCARD) != null) { object.put(IDCARD, encryptDes(object.getString(IDCARD))); } if(object.get(BANK_CARD_NUMBER) != null) { object.put(BANK_CARD_NUMBER, encryptDes(object.getString(BANK_CARD_NUMBER))); } if(object.get(BANK_NO) != null) { object.put(BANK_NO, encryptDes(object.getString(BANK_NO))); } return object.toString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return data; } /** * 加密数据 * @param encryptString 注意:这里的数据长度只能为8的倍数 * @return * @throws Exception */ public static String encryptDes(String encryptString) { try { StringBuffer sb = new StringBuffer(); sb.append(encryptString); for (int i = 0; i < EIGHT - encryptString.getBytes(UTF).length % EIGHT ; i++) { sb.append("="); } encryptString = sb.toString(); SecretKeySpec key = new SecretKeySpec(getKey(PASSWORD_CRYPT_KEY), "DES"); Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] encryptedData = cipher.doFinal(encryptString.getBytes("UTF-8")); return Base64.encodeBase64String(encryptedData); } catch (Exception e) { // TODO: handle exception } return encryptString; } /*** * 解密数据 * @param decryptString * @return * @throws Exception */ public static String decryptDes(String decryptString) throws Exception { SecretKeySpec key = new SecretKeySpec(getKey(PASSWORD_CRYPT_KEY), "DES"); Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding"); cipher.init(Cipher.DECRYPT_MODE, key); byte[] decryptedData = cipher.doFinal(Base64.decodeBase64(decryptString)); return new String(decryptedData).replaceAll("=", ""); } /** * 自定义一个key * @param keyRule */ public static byte[] getKey(String keyRule) { Key key = null; byte[] keyByte = keyRule.getBytes(); // 创建一个空的八位数组,默认情况下为0 byte[] byteTemp = new byte[8]; // 将用户指定的规则转换成八位数组 for (int i = 0; i < byteTemp.length && i < keyByte.length; i++) { byteTemp[i] = keyByte[i]; } key = new SecretKeySpec(byteTemp, "DES"); return key.getEncoded(); } public static void main(String[] args) throws Exception { String a = "{\"id_number\":\"36042919960907151X\",\"bank_card_number\":\"6214680048545055\",\"name\":\"刘玺\",\"mobile\":\"15991856264\",\"sign\":\"a93471e386fed0427c68bd6e9967011b\"}"; System.out.println(encode(a)); //String b = "{\"sign\":\"a93471e386fed0427c68bd6e9967011b\",\"id_number\":\"NjEyMzIzMTk5MjA5MDg0ODcy\",\"name\":\"5YiY5466\",\"bank_card_number\":\"NjIxNDY4MDA0ODU0NTA1NQ==\",\"mobile\":\"MTU4NzMwNTI4MzY=\"}"; System.out.println(decode(encode(a))); } }