赞
踩
1. 注册微信开放平台(地址:open.weixin.qq.com)
2. 绑定微信公众号(注:微信开放平台帐号必须完成开发者资质认证才可以绑定)
3.前端通过wx.login 获取 code
4.前端通过wx.getUserInfo 获取以下信息
encryptedData | string | 包括敏感数据在内的完整用户信息的加密数据,详见 用户数据的签名验证和加解密 | |
iv | string | 加密算法的初始向量,详见用户数据的签名验证和加解密 |
5.后端通过appid secret获取access_token验证登陆过期情况
6.通过appid secret code 获取session_key
7.开发者后台校验与解密开放数据
微信会对这些开放数据做签名和加密处理。开发者后台拿到开放数据后可以对数据进行校验签名和解密,来保证数据不被篡改。
问题就出现在这个解密的地方,这个解密是需要encryptedData iv 和session_key 但是我把session_key传错了
控制台就爆红了:
解密的工具类如下:
- package com.labour.utils;
-
- 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;
-
- /**
- * Created by yfs on 2021-01-13
- * <p>
- * AES-128-CBC 加密方式
- * 注:
- * AES-128-CBC可以自己定义“密钥”和“偏移量“。
- * AES-128是jdk自动生成的“密钥”。
- */
- public class AesUtil {
- static {
- //BouncyCastle是一个开源的加解密解决方案,主页在http://www.bouncycastle.org/
- Security.addProvider(new BouncyCastleProvider());
- }
- /**
- * AES解密
- *
- * @param data //密文,被加密的数据
- * @param key //秘钥
- * @param iv //偏移量
- * @param encodingFormat //解密后的结果需要进行的编码
- * @return
- * @throws Exception
- */
- public static String decrypt(String data, String key, String iv, String encodingFormat) throws Exception {
- // initialize();
- //被加密的数据
- 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;
- }
-
- }
把session_key传进去就好了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。