[Java]解密微信支付APIV3的通知notify(AEAD_AES_256_GCM算法)

2022-02-26 1274点热度 0人点赞 0条评论

分享我使用的用户解密微信支付APIV3的通知notify,根据微信支付官方的介绍:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_5.shtml是使用的AEAD_AES_256_GCM加密方式,使用key、nonce和associated_data,对数据密文resource.ciphertext进行解密,得到JSON形式的资源对象。不过看了下,当前页面并没有相关的例子,下面贴出我使用的工具算法。

/**
 * AEAD_AES_256_GCM 解密
 * @param mchKey 用商户平台上设置的APIv3密钥【微信商户平台—>账户设置—>API安全—>设置APIv3密钥】,记为key
 * @param ciphertext 需要解密的字符串
 * @return 解密后的字符(JSON字符串,再根据自己的需要转成JSON即可)
 */
public String decryptToString(String mchKey, String associatedData, String nonce, String ciphertext)
        throws Exception {
    Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");

    SecretKeySpec key = new SecretKeySpec(mchKey.getBytes(StandardCharsets.UTF_8), "AES");
    GCMParameterSpec spec = new GCMParameterSpec(128, nonce.getBytes(StandardCharsets.UTF_8));

    cipher.init(Cipher.DECRYPT_MODE, key, spec);
    cipher.updateAAD(associatedData.getBytes(StandardCharsets.UTF_8));

    return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)), StandardCharsets.UTF_8);
}

 

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论