微信小程序对前端数据进行了加密,如user信息,运动健康步数等。
由于项目中用到了huttol,解密也尽量用hutool来解密,代码如下 :
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import cn.hutool.core.codec.Base64Decoder;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;
/**
* 微信前端加密数据解密算法
* <p/>
* 对称解密的目标密文为 Base64_Decode(encryptedData)。
* 对称解密秘钥 aeskey = Base64_Decode(session_key)。
* 对称解密算法初始向量 为Base64_Decode(iv),其中iv由数据接口返回。
* <p/>
* * @param encrypted 加密数据
* * @param session_key 会话** session_key,从登陆反回的接口中取得,每个用户的session_key不一样
* * @param iv 加密算法的初始向量
*/
public static String wxDecrypt(String encrypted, String session_key, String iv) {
try {
byte[] encrypted64 = Base64Decoder.decode(encrypted);
byte[] key64 = Base64Decoder.decode(session_key);
byte[] iv64 = Base64Decoder.decode(iv);
AES aes = new AES(Mode.CBC, Padding.PKCS5Padding,
new SecretKeySpec(key64, "AES"),
new IvParameterSpec(iv64));
byte[] decryptDataBase64 = aes.decrypt(encrypted64);
return new String(decryptDataBase64, "UTF-8");
} catch (Exception e) {
return null;
}
}