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

原文地址:https://www.cnblogs.com/microestc/p/11828654.html

时间: 2024-10-02 03:46:29

微信小程序加密解密 C# 以及 填充无效,无法被移除错误的解决方案 Padding is invalid and cannot be removed的相关文章

thinkphp 导入微信小程序加密解密库

第三方类库 第三方类库指除了 ThinkPHP 框架.应用项目类库之外的其他类库,一般由第三方系统或产品提供,如 Smarty.Zend 等系统的类库等. 前面使用自动加载或 import 方法导入的类库,ThinkPHP 约定是以 .class.php 为后缀的,非这类的后缀,需要通过 import 的参数来控制. 但对第三类库,由于不会有此约定,其后缀只能认为是 php .为了方便的引入其他框架和系统的类库,ThinkPHP 特意提供了导入第三方类库的功能.第三方类库统一放置在 ThinkP

微信小程序,工具未检测合法域名,400 (Bad Request)错误

1.工具未检测合法域名 这个我就不多说了,如果你新建的时候没有填写AppID的话这个我就不太清楚了 如果新建项目的时候填写了AppID的话,出现这种错误,那你应该去小程序后台 设置->开发者设置->服务器域名 配置你的服务器,这里需要注意,一个月只能修改五次,所以慎重! 这里是小程序开发手册里的配置流程 2.小程序400 (Bad Request)错误 今天写小程序的时候,请求了一个接口,出现问题如下: 查阅了一下资料,发现如下问题 原始代码: wx.request({ url:API_URL

winform小程序------加密解密,CryptoStream()的使用

今天有幸被召回母校给即将毕业的学弟学妹们讲我这两年的工作史,看了下母校没啥特别的变化,就是寝室都安了空调,学妹们都非常漂亮而已..好了不扯蛋了,说下今天的主题吧.这些天我在深度定制语法高亮功能的同时发现了博客园提供的一些有意思的函数,甚至有几个博客园都没用到,我也不知道怎么才能触发那些功能..打开这个js就可以看到很多好用的东西了,虽然写的不怎么样,但是至少有这些功能. ps: 推荐安装一个代码格式化的插件,否则一坨看着蛋疼.比如第一个就是 log,方便调试. 955.cc/apggj 955.

微信小程序用AES加密和java后台对接

哇,我真的厉害,又对接成功了. 在原博客https://www.cnblogs.com/fuckingPangzi/p/10281990.html,继续完成的. 在前台js加密的时候,是有一个vi(偏移量)和AES的密钥差不多是16位的. 然后你在后台解密的时候,需要在设置vi时候,弄一下getBytes("UTF-8")就ok了.如图 刚把AES和RSA的微信小程序加密整理到一个项目里面去了. 原文地址:https://www.cnblogs.com/fuckingPangzi/p/

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

微信小程序获取用户信息诸如unionId的时候需要解密,如果遇到偶然的解密失败(填充无效,无法被移除),原因很有可能是session_key错误, 也是就你用作解密的session_key并不是微信用作加密的那个了,但是并不代表你的session_key已经失效. C#解密代码(亲测有效,可以直接复制使用) /// <summary> /// Aes解密 /// </summary> /// <param name="str">需要解密的字符串<

微信小程序AES加密解密

微信小程序  其实在调用一些第三方 js的时候 其实没有大家想的那么复杂,无非就是把原生js调用方式   改为微信小程序 js调用方式 废话不多说直接贴代码 其实就是将原生function 或者 对象 赋值给 module.exports; 至于module.exports 不懂得 先去看微信开发文档 在这里就不多说了 本次讲一下主要思路 1.首先老规矩 去下载 原生aes.js 的 文件 https://github.com/hellobajie/AES-of-JavaScript 2.修改a

原创:微信小程序java实现AES解密并获取unionId

来自:微信小程序联盟 如果大家使用小程序的同时还在使用公众号的话,可能会用到unionId这种功能,由于公司业务需要,我们需要使用unionId,具体使用方法,请参考微信开放平台的说明,但是在微信小程序的文档中只给出了部分语言实现的源码,竟然没有java的,小程序的开发人员是有多么懒.难道大家都不用java写后台??? 什么鬼,然后开始了各种AES踩坑之路,其实参考了很多的网上的教程,再次不能一一列出来给大家了,(因为我写这篇文章的时候,已经是解决问题一周以后了),也收到管理员的很多帮助,再次写

微信小程序开放数据解密 AES-128-CBC 解密(C#版本)

最近在开发小程序,需要跟微信服务端交互,微信敏感数据都有加密返回,需要在服务端接收进行解密后再返回给客户端小程序,今天就通过C# 进行数据的解密,官方下载下来是Node.C++.php等,就是没有C# 代码,于是就上度娘,找到 https://blog.csdn.net/jasonsong2008/article/details/83586119 https://www.cnblogs.com/jetz/p/6384809.html 经过一番研究,搞定啦,其实就是用了aes加密方法. 下面把第一

微信小程序解密微信运动数据

微信小程序API-微信运动 https://mp.weixin.qq.com/debug/wxadoc/dev/api/we-run.html#wxgetwerundataobject 思路:wx.login获取的code请求获取的session_key,wx.getWeRunData获取的iv,encryptData,将它们一起发送到后台解密就行了. 安全顾虑,因为只是示例所以直接传递session_key了,为了安全最好按照下图的方式加密后存储到Redis中再传递key. 小程序端代码 ge