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

  • 相关阅读:
    iscsi: 多路径
    Paxos算法分析
    ceph实践: 搭建环境
    ocfs2: 搭建环境
    设计模式:Context模式
    Ceph剖析:Leader选举
    Ceph剖析:定时器safetimer的实现
    nfs:环境搭建
    Ceph剖析:数据分布之CRUSH算法与一致性Hash
    Linux命令小结:crontab/netstat/iostat/sar
  • 原文地址:https://www.cnblogs.com/microestc/p/11828654.html
Copyright © 2011-2022 走看看