/** * 对公众平台发送给公众账号的消息加解密示例代码. * * @copyright Copyright (c) 1998-2014 Tencent Inc. */ import java.nio.charset.Charset; import java.util.Arrays; /** * 提供基于PKCS7算法的加解密接口. */ class PKCS7Encoder { static Charset CHARSET = Charset.forName("utf-8"); static int BLOCK_SIZE = 32; /** * 获得对明文进行补位填充的字节. * * @param count 需要进行填充补位操作的明文字节个数 * @return 补齐用的字节数组 */ static byte[] encode(int count) { // 计算需要填充的位数 int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE); if (amountToPad == 0) { amountToPad = BLOCK_SIZE; } // 获得补位所用的字符 char padChr = chr(amountToPad); String tmp = new String(); for (int index = 0; index < amountToPad; index++) { tmp += padChr; } return tmp.getBytes(CHARSET); } /** * 删除解密后明文的补位字符 * * @param decrypted 解密后的明文 * @return 删除补位字符后的明文 */ static byte[] decode(byte[] decrypted) { int pad = (int) decrypted[decrypted.length - 1]; if (pad < 1 || pad > 32) { pad = 0; } return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad); } /** * 将数字转化成ASCII码对应的字符,用于对明文进行补码 * * @param a 需要转化的数字 * @return 转化得到的字符 */ static char chr(int a) { byte target = (byte) (a & 0xFF); return (char) target; } }
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import com.alibaba.fastjson.JSONObject; /** * 对微信小程序用户加密数据的解密示例代码. * * @ClassName WXBizDataCrypt * @Description TODO(这里用一句话描述这个类的作用) * @author tf * @Date 2016年11月19日 下午2:56:36 * @version 1.0.0 */ @SuppressWarnings("restriction") public class WXBizDataCrypt { /* * 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。 */ private static WXBizDataCrypt instance = null; private WXBizDataCrypt() { } public static WXBizDataCrypt getInstance() { if (instance == null) instance = new WXBizDataCrypt(); return instance; } /** * 对于官方加密数据(encryptData)解密说明如下: 加密数据解密算法 接口如果涉及敏感数据(如wx.getUserInfo当中的 * openId 和unionId ),接口的明文内容将不包含这些敏感数据。开发者如需要获取敏感数据,需要对接口返回的加密数据( * encryptedData )进行对称解密。 解密算法如下: 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。 * 对称解密的目标密文为 Base64_Decode(encryptedData), 对称解密秘钥 aeskey = * Base64_Decode(session_key), aeskey 是16字节 对称解密算法初始向量 iv 会在数据接口中返回。 * * @Description (TODO这里用一句话描述这个方法的作用) * @param encryptedData * 加密内容 * @param sessionKey * 小程序登录sessionKey * @param iv * 解密算法初始向量 iv 会在数据接口中返回。 * @param encodingFormat * 编码格式默认UTF-8 * @return 返回解密后的字符串 * @throws Exception */ public String decrypt(String encryptedData, String sessionKey, String iv, String encodingFormat) throws Exception { try { Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); BASE64Decoder base64Decoder = new BASE64Decoder(); byte[] _encryptedData = base64Decoder.decodeBuffer(encryptedData); byte[] _sessionKey = base64Decoder.decodeBuffer(sessionKey); byte[] _iv = base64Decoder.decodeBuffer(iv); SecretKeySpec secretKeySpec = new SecretKeySpec(_sessionKey, "AES"); IvParameterSpec ivParameterSpec = new IvParameterSpec(_iv); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec); byte[] original = cipher.doFinal(_encryptedData); byte[] bytes = PKCS7Encoder.decode(original); String originalString = new String(bytes, "UTF-8"); return originalString; } catch (Exception ex) { return null; } } public static void main(String[] args) throws Exception { // 需要加密的字串 // String appid = "wx4f4bc4dec97d474b"; String sessionKey = "tiihtNczf5v6AKRyjwEUhQ=="; String encryptedData = "CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZM" + "QmRzooG2xrDcvSnxIMXFufNstNGTyaGS" + "9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+" + "3hVbJSRgv+4lGOETKUQz6OYStslQ142d" + "NCuabNPGBzlooOmB231qMM85d2/fV6Ch" + "evvXvQP8Hkue1poOFtnEtpyxVLW1zAo6" + "/1Xx1COxFvrc2d7UL/lmHInNlxuacJXw" + "u0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn" + "/Hz7saL8xz+W//FRAUid1OksQaQx4CMs" + "8LOddcQhULW4ucetDf96JcR3g0gfRK4P" + "C7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB" + "6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns" + "/8wR2SiRS7MNACwTyrGvt9ts8p12PKFd" + "lqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYV" + "oKlaRv85IfVunYzO0IKXsyl7JCUjCpoG" + "20f0a04COwfneQAGGwd5oa+T8yO5hzuy" + "Db/XcxxmK01EpqOyuxINew=="; String iv = "r7BXXKkLb8qrSNn05n0qiA=="; String deString = WXBizDataCrypt.getInstance().decrypt(encryptedData, sessionKey, iv, "utf-8"); JSONObject jsonObject = JSONObject.parseObject(deString); System.out.println(jsonObject); } }
运行后的结果如下:
{"watermark":{"timestamp":1477314187,"appid":"wx4f4bc4dec97d474b"},"nickName":"Band","avatarUrl":"http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0","province":"Guangdong","unionId":"ocMvos6NjeKLIBqg5Mr9QjxrP1FA","gender":1,"language":"zh_CN","country":"CN","city":"Guangzhou","openId":"oGZUI0egBJY1zhBYw2KhdUfwVJJE"}
相关推荐
基于微信小程序的数据采集管理系统、方法及应用.docx基于微信小程序的数据采集管理系统、方法及应用.docx基于微信小程序的数据采集管理系统、方法及应用.docx基于微信小程序的数据采集管理系统、方法及应用.docx基于...
对微信小程序进行解密,python文件
该工具主要用于解密微信小程序的wxapkg包
【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大...
微信小程序解密工具_免安装版本.zip
java微信小程序加密数据解密 可以直接使用可以直接使用可以直接使用可以直接使用可以直接使用可以直接使用
微信小程序投票系统微信小程序云开发实现的...瀑布流展示,排名,活动发布等功能排名,活动发布等功能活动发布等功能微信小程序投票系统微信小程序云开发实现的投票微信小程序系统。瀑布流展示,排名,活动发布等功能
微信小程序 Cryptojs 解密工具包
微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)微信小程序 商城 (源码)...
【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大...
微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小程序 小程序官方Demo (源码)微信小...
【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大...
用于微信小程序用户数据解密。 JAVA 代码实现 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。 对称解密的目标密文为 Base64_Decode(encryptedData)。 对称解密秘钥 aeskey = Base64_Decode(session_key), ...
【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大...
【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大...
【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大...
【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大...
前端期末大作业毕业设计微信小程序商城系统源码 前端期末大作业毕业设计微信小程序商城系统源码 前端期末大作业毕业设计微信小程序商城系统源码 前端期末大作业毕业设计微信小程序商城系统源码 前端期末大作业毕业...
微信小程序 小程序地图定位 (源码)微信小程序 小程序地图定位 (源码)微信小程序 小程序地图定位 (源码)微信小程序 小程序地图定位 (源码)微信小程序 小程序地图定位 (源码)微信小程序 小程序地图定位 (源码)微信小...
【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大...