zoukankan      html  css  js  c++  java
  • 微信小程序加密解密 C# 以及 填充无效,无法被移除错误的解决方案 Padding is invalid and cannot be removed

    解密加密源码

     1 using System;
     2 using System.Security.Cryptography;
     3 using System.Text;
     4 
     5 namespace Wechat
     6 {
     7     public static class Security
     8     {
     9         public static string Decrypt(string key, string iv, string data)
    10         {
    11             var rgbKey = Convert.FromBase64String(key);
    12             var rgbIV = Convert.FromBase64String(iv);
    13             var bytes = Convert.FromBase64String(data);
    14 
    15             try
    16             {
    17                 using var managed = new AesManaged()
    18                 {
    19                     Mode = CipherMode.CBC,
    20                     BlockSize = 128,
    21                     Padding = PaddingMode.PKCS7
    22                 };
    23                 using var decryptor = managed.CreateDecryptor(rgbKey, rgbIV);
    24                 var final = decryptor.TransformFinalBlock(bytes, 0, bytes.Length);
    25                 return Encoding.UTF8.GetString(final);
    26             }
    27             catch
    28             {
    29                 return null;
    30             }
    31         }
    32 
    33         public static string Encrypt(string key, string iv, string data)
    34         {
    35             var rgbKey = Convert.FromBase64String(key);
    36             var rgbIV = Convert.FromBase64String(iv);
    37             var bytes = Encoding.UTF8.GetBytes(data);
    38 
    39             try
    40             {
    41                 using var managed = new AesManaged()
    42                 {
    43                     Mode = CipherMode.CBC,
    44                     BlockSize = 128,
    45                     Padding = PaddingMode.PKCS7
    46                 };
    47                 using var encryptor = managed.CreateEncryptor(rgbKey, rgbIV);
    48                 var final = encryptor.TransformFinalBlock(bytes, 0, bytes.Length);
    49                 return Convert.ToBase64String(final);
    50             }
    51             catch
    52             {
    53                 return null;
    54             }
    55         }
    56     }
    57 }

    其次说一下为什么会第一次或间断性解密失败?

    我开始的微信小程序代码 button 点击 -> 得到 iv,encryptedData -> wx.login -> 得到 code -> code,iv,encryptedData 发送服务器 -> 然后 code 得到 session_key  然后解密,

    问题出在哪里呢,就出在点击 button 的地方,没有 wx.login 得到code 的时候,iv和encryptedData 就已存在一个session_key ,和之后得到的session_key 就不同了,

    所以

    在点击“获取信息”按钮 之前就应该先使用wx.login 得到code或者session_key,然后 点击 按钮 ,所以 在 onload 或者 onshow 里面 就应该 wx.login 得到 code或者 session_key

  • 相关阅读:
    java拦截器与过滤器打印请求url与参数
    mybatis学习笔记(六)使用generator生成mybatis基础配置代码和目录结构
    【IDEA】IDEA创建Maven的Web项目并运行以及打包
    【环境变量】Linux 下三种方式设置环境变量与获取环境变量
    【Git】GitHub的SSH提交配置[
    spring配置redis注解缓存
    【查看linux配置】查看linux系统常用的命令,Linux查看系统配置常用命令
    Redis集群
    linux中wget 、apt-get、yum rpm区别
    spring+redis的集成,redis做缓存
  • 原文地址:https://www.cnblogs.com/microestc/p/11828654.html
Copyright © 2011-2022 走看看