微信小程序对前端数据进行了加密,如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;
-
- /**
- * 微信前端加密数据解密算法
- *
- * 对称解密的目标密文为 Base64_Decode(encryptedData)。
- * 对称解密秘钥 aeskey = Base64_Decode(session_key)。
- * 对称解密算法初始向量 为Base64_Decode(iv),其中iv由数据接口返回。
- *
- * * @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;
- }
- }