C# .net 填充无效,无法被移除 微信小程序解密失败的解决办法

微信小程序获取用户信息诸如unionId的时候需要解密,如果遇到偶然的解密失败(填充无效,无法被移除),原因很有可能是session_key错误,

也是就你用作解密的session_key并不是微信用作加密的那个了,但是并不代表你的session_key已经失效.

 

C# .net 填充无效,无法被移除 微信小程序解密失败的解决办法_第1张图片

C#解密代码(亲测有效,可以直接复制使用)

        /// 
        /// Aes解密
        /// 
        /// 需要解密的字符串
        /// 密钥,长度不够时空格补齐,超过时从左截取
        /// 偏移量,长度不够时空格补齐,超过时从左截取
        /// 秘钥长度,16 24 32
        /// 解密模式
        /// 填充方式
        /// 
        public static string AesDecode(string str, string key, string iv, int keyLenth = 16, CipherMode aesMode = CipherMode.CBC, PaddingMode aesPadding = PaddingMode.PKCS7)
        {
       if (!new List<int> { 16, 24, 32 }.Contains(keyLenth)) { return null;//密钥的长度,16位密钥 = 128位,24位密钥 = 192位,32位密钥 = 256位。 } var oldBytes = Convert.FromBase64String(str); var bKey = new Byte[keyLenth]; Array.Copy(Convert.FromBase64String(key.PadRight(keyLenth)), bKey, keyLenth); var bIv = new Byte[16]; Array.Copy(Convert.FromBase64String(iv.PadRight(16)), bIv, 16); var rijalg = new RijndaelManaged { Mode = aesMode, Padding = aesPadding, Key = bKey, IV = bIv, }; var decryptor = rijalg.CreateDecryptor(rijalg.Key, rijalg.IV); var rtByte = decryptor.TransformFinalBlock(oldBytes, 0, oldBytes.Length); return Encoding.UTF8.GetString(rtByte); }

如果这个时候你解密报出错误:填充无效,无法被移除 原因:

1. 如果一次都没有成功过,检查你的代码,或者把上面的代码拷过去

2. 偶然遇到此bug,这个是重点,你就不要去网上找什么其他方案了.也不要再去检查你的代码了.问题的原因出在微信.

加密过程是这样的:

session_key + iv = encryptedData;

由于 iv 和 encryptedData 是从wx.getUserInfo()或者是点击

转载于:https://www.cnblogs.com/fancyblogs/p/9560268.html

你可能感兴趣的:(C# .net 填充无效,无法被移除 微信小程序解密失败的解决办法)