Java中解密微信加密数据工具类
程序员文章站
2022-07-06 13:57:21
当我们开发微信公众号,小程序等,微信返回给我们的数据往往是经过加密的,我们需要使用 sessionkey 配合解密,才能得到我们想要的数据1、引入依赖&l...
当我们开发微信公众号,小程序等,微信返回给我们的数据往往是经过加密的,我们需要使用 sessionkey 配合解密,才能得到我们想要的数据
1、引入依赖
<!-- lombok依赖 --> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <optional>true</optional> </dependency> <!-- alibaba的fastjson --> <dependency> <groupid>com.alibaba</groupid> <artifactid>fastjson</artifactid> <version>1.2.60</version> </dependency> <!-- 工具包 --> <dependency> <groupid>org.apache.commons</groupid> <artifactid>commons-lang3</artifactid> <version>3.8.1</version> </dependency> <!-- rsa加密工具--> <dependency> <groupid>org.bouncycastle</groupid> <artifactid>bcprov-jdk15on</artifactid> <version>1.55</version> </dependency>
2、解密工具类
import com.alibaba.fastjson.jsonobject; import com.sun.org.apache.xerces.internal.impl.dv.util.base64; import lombok.extern.slf4j.slf4j; import org.apache.commons.lang3.stringutils; import org.bouncycastle.jce.provider.bouncycastleprovider; import javax.crypto.cipher; import javax.crypto.spec.ivparameterspec; import javax.crypto.spec.secretkeyspec; import java.security.algorithmparameters; import java.security.security; import java.util.arrays; /** * 解密微信加密数据工具类 */ @slf4j public class wechatutils { /** * 解密微信加密数据 * * @param encrypteddata * @param iv * @param sessionkey * @return */ public static jsonobject decryptwechatdata(string encrypteddata, string iv, string sessionkey) { // 被加密的数据 byte[] databyte = base64.decode(encrypteddata); // 加密秘钥 byte[] keybyte = base64.decode(sessionkey); // 偏移量 byte[] ivbyte = base64.decode(iv); try { 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"); if (stringutils.isnotblank(result)) { log.info("----------解密微信数据成功----------"); return jsonobject.parseobject(result); } } } catch (exception e) { e.printstacktrace(); log.info("----------解密微信数据失败----------"); } return null; } }
这样,我们将微信加密的数据,转化成了 json 对象,就得到了我们想要的数据了
以上就是java中解密微信加密数据工具类的详细内容,更多关于java加密解密工具类的资料请关注其它相关文章!
上一篇: 深圳出现一位低调富豪:打造高科技仪表生产企业,身家20亿
下一篇: 你什么意思啊
推荐阅读
-
微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
-
Java中AES加密,解密的工具类,以及MD5加密
-
java封装一个企业微信机器人的工具类
-
Java中解密微信加密数据工具类
-
AESUtil Java AES 加密解密工具类
-
Java中AES加解密的工具类
-
Java实现微信加密数据解密算法
-
JAVA RSA 加密 解密 工具类 支持分片
-
java 微信开发的工具类WeChatUtils
-
微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。