aes iv key 微信_Java微信解密算法

57b7fbe171f585b4e169dc24e1b3e50f.png

导入依赖

f1c6015507b9a3807e6fb0c1352f2384.png
    org.bouncycastle    bcprov-jdk15on    1.56
57b7fbe171f585b4e169dc24e1b3e50f.png

解密代码

f1c6015507b9a3807e6fb0c1352f2384.png
import org.apache.commons.codec.binary.Base64;import org.bouncycastle.jce.provider.BouncyCastleProvider;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import java.io.UnsupportedEncodingException;import java.security.*;import java.security.spec.InvalidParameterSpecException;public class WxAesUtil {    static {        Security.addProvider(new BouncyCastleProvider());    }    /**     * AES解密     * @param data  密文     * @param key   秘钥     * @param iv    偏移量     * @param encodingFormat    解密后需要进行的编码     * @return     */    public static String decrypt(String data, String key, String iv, String encodingFormat){        //被加密的数据        byte[] dataByte = Base64.decodeBase64(data);        //加密秘钥        byte[] keyByte = Base64.decodeBase64(key);        //偏移量        byte[] ivByte = Base64.decodeBase64(iv);        try {            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");            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, encodingFormat);                return result;            }            return null;        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        } catch (NoSuchPaddingException e) {            e.printStackTrace();        } catch (InvalidParameterSpecException e) {            e.printStackTrace();        } catch (InvalidKeyException e) {            e.printStackTrace();        } catch (InvalidAlgorithmParameterException e) {            e.printStackTrace();        } catch (IllegalBlockSizeException e) {            e.printStackTrace();        } catch (BadPaddingException e) {            e.printStackTrace();        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        return null;    }}

    上述就是解密微信加密信息的全部代码了。Java获取小程序手机号码以及解密用户信息请参考如下说明:

data为前端传入的encryptedData参数iv为前端传入的iv参数key则是通过https://api.weixin.qq.com/sns/jscode2session接口获取的session_key。

    若出现解密报错,可以排查以下几点:

1、解密用户信息时一定要缓存每次登录(jscode2session)的session_key,然后用于解密,否则将解密不成功2、jscode2session接口一定在前面,其他API接口在后使用3、获取session_key不成功时查看code是否已被使用

【更多精彩】

脚本搭建Nginx、Redis、MySql、Maven

Java获取小程序手机号码

Java微信小程序支付

09e9bb575f478a5c52b6872c9b6ea1fa.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值