1. java 微信小程序,解密

2020-03-29  本文已影响0人  逗不一样

/**

* @param sessionKey

* @param encryptedData

* @param iv

* @Description: 获取C端小程序手机号的解析

*/

public static EncryptedDataOfMobile getEncryptedDataOfMobile(String sessionKey, String encryptedData, String iv) {

logger.info("getEncryptedData sessionKey[{}], encryptedData[{}], iv[{}]", sessionKey, encryptedData, iv);

// 被加密的数据

  byte[] dataByte = Base64.decode(encryptedData);

// 加密秘钥

  byte[] keyByte = Base64.decode(sessionKey);

// 偏移量

  byte[] ivByte = Base64.decode(iv);

try {

// 如果密钥不足16位,那么就补足.  这个if 中的内容很重要

      int base =16;

if (keyByte.length % base !=0) {

int groups = keyByte.length / base + (keyByte.length % base !=0 ?1 :0);

byte[] temp =new byte[groups * base];

Arrays.fill(temp, (byte)0);

System.arraycopy(keyByte,0, temp,0, keyByte.length);

keyByte = temp;

}

// 初始化

      Security.addProvider(new BouncyCastleProvider());

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");

SecretKeySpec spec =new SecretKeySpec(keyByte,"AES");

AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");

parameters.init(new IvParameterSpec(ivByte));

cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化

      byte[] resultByte = cipher.doFinal(dataByte);

if (null != resultByte && resultByte.length >0) {

String result =new String(resultByte,"UTF-8");

logger.info("getEncryptedData result[{}]", result);

return FasterJsonTool.readValue(result, EncryptedDataOfMobile.class);

}

}catch (Exception e) {

logger.info("getEncryptedDataOfMobile 解密手机号异常", e);

}

return null;

}

上一篇 下一篇

猜你喜欢

热点阅读