美文网首页
1. java 微信小程序,解密

1. java 微信小程序,解密

作者: 逗不一样 | 来源:发表于2020-03-29 22:42 被阅读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;

}

相关文章

网友评论

      本文标题:1. java 微信小程序,解密

      本文链接:https://www.haomeiwen.com/subject/veppuhtx.html