微信小程序加密解密 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