当前位置:   article > 正文

uniapp 授权登陆获取信息 报错 Key length not 128/192/256 bits._session_key key length not 128/192/256 bits.

session_key key length not 128/192/256 bits.

1. 注册微信开放平台(地址:open.weixin.qq.com)

2. 绑定微信公众号(注:微信开放平台帐号必须完成开发者资质认证才可以绑定)

3.前端通过wx.login 获取 code

4.前端通过wx.getUserInfo 获取以下信息

encryptedDatastring包括敏感数据在内的完整用户信息的加密数据,详见 用户数据的签名验证和加解密 
ivstring加密算法的初始向量,详见用户数据的签名验证和加解密

5.后端通过appid secret获取access_token验证登陆过期情况

6.通过appid secret code 获取session_key

7.开发者后台校验与解密开放数据

  微信会对这些开放数据做签名和加密处理。开发者后台拿到开放数据后可以对数据进行校验签名和解密,来保证数据不被篡改。

   

  问题就出现在这个解密的地方,这个解密是需要encryptedData ivsession_key 但是我把session_key传错了

  控制台就爆红了:

  

  解密的工具类如下:

  1. package com.labour.utils;
  2. import org.apache.commons.codec.binary.Base64;
  3. import org.bouncycastle.jce.provider.BouncyCastleProvider;
  4. import javax.crypto.BadPaddingException;
  5. import javax.crypto.Cipher;
  6. import javax.crypto.IllegalBlockSizeException;
  7. import javax.crypto.NoSuchPaddingException;
  8. import javax.crypto.spec.IvParameterSpec;
  9. import javax.crypto.spec.SecretKeySpec;
  10. import java.io.UnsupportedEncodingException;
  11. import java.security.*;
  12. import java.security.spec.InvalidParameterSpecException;
  13. /**
  14. * Created by yfs on 2021-01-13
  15. * <p>
  16. * AES-128-CBC 加密方式
  17. * 注:
  18. * AES-128-CBC可以自己定义“密钥”和“偏移量“。
  19. * AES-128是jdk自动生成的“密钥”。
  20. */
  21. public class AesUtil {
  22. static {
  23. //BouncyCastle是一个开源的加解密解决方案,主页在http://www.bouncycastle.org/
  24. Security.addProvider(new BouncyCastleProvider());
  25. }
  26. /**
  27. * AES解密
  28. *
  29. * @param data //密文,被加密的数据
  30. * @param key //秘钥
  31. * @param iv //偏移量
  32. * @param encodingFormat //解密后的结果需要进行的编码
  33. * @return
  34. * @throws Exception
  35. */
  36. public static String decrypt(String data, String key, String iv, String encodingFormat) throws Exception {
  37. // initialize();
  38. //被加密的数据
  39. byte[] dataByte = Base64.decodeBase64(data);
  40. //加密秘钥
  41. byte[] keyByte = Base64.decodeBase64(key);
  42. //偏移量
  43. byte[] ivByte = Base64.decodeBase64(iv);
  44. try {
  45. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
  46. SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
  47. AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
  48. parameters.init(new IvParameterSpec(ivByte));
  49. cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
  50. byte[] resultByte = cipher.doFinal(dataByte);
  51. if (null != resultByte && resultByte.length > 0) {
  52. String result = new String(resultByte, encodingFormat);
  53. return result;
  54. }
  55. return null;
  56. } catch (NoSuchAlgorithmException e) {
  57. e.printStackTrace();
  58. } catch (NoSuchPaddingException e) {
  59. e.printStackTrace();
  60. } catch (InvalidParameterSpecException e) {
  61. e.printStackTrace();
  62. } catch (InvalidKeyException e) {
  63. e.printStackTrace();
  64. } catch (InvalidAlgorithmParameterException e) {
  65. e.printStackTrace();
  66. } catch (IllegalBlockSizeException e) {
  67. e.printStackTrace();
  68. } catch (BadPaddingException e) {
  69. e.printStackTrace();
  70. } catch (UnsupportedEncodingException e) {
  71. e.printStackTrace();
  72. }
  73. return null;
  74. }
  75. }

  把session_key传进去就好了

 

  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/409054
推荐阅读
相关标签
  

闽ICP备14008679号