123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- 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)));
- }
- }
|