/**
* @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;
}
网友评论