• 微信小程序 获取用户信息 encryptData解密 C#版本


    最近学习小程序开发,需要对encryptData解密,获取用户信息,官方源码没有C#版本,网上的资料比较杂,有的使用还有问题,下面贴一下自己亲试可以使用的一个源码

    1、code 换取 session_key
    前端先调 wx.login 得到code传输到后端,后端通过接口

    https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
    

    换取session_key和openid,openid返回前端,session_key保存(缓存)解密用。官方文档

    注意:

    • 会话密钥session_key 是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。
    • UnionID 只在满足一定条件的情况下返回。具体参看UnionID机制说明
    • 临时登录凭证code只能使用一次

    2、encryptData解密
    前端先调 wx.getUserInfo 得到encryptData、iv传输到后端,加上第一步得到的session_key,进行解密
    加密数据解密算法官方说明

    .net4.5下C#的实现代码如下:

     		/// <summary>
            /// 根据微信小程序平台提供的解密算法解密数据
            /// </summary>
            /// <param name="encryptedData">加密数据</param>
            /// <param name="iv">初始向量</param>
            /// <param name="sessionKey">从服务端获取的SessionKey</param>
            /// <returns></returns>
            public static string Decrypt(string encryptedData, string iv, string sessionKey) { 
                //创建解密器生成工具实例
                AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
                //设置解密器参数
                aes.Mode = CipherMode.CBC;
                aes.BlockSize = 128;
                aes.Padding = PaddingMode.PKCS7;
                //格式化待处理字符串
                byte[] byte_encryptedData = Convert.FromBase64String(encryptedData);
                byte[] byte_iv = Convert.FromBase64String(iv);
                byte[] byte_sessionKey = Convert.FromBase64String(sessionKey);
    
                aes.IV = byte_iv;
                aes.Key = byte_sessionKey;
                //根据设置好的数据生成解密器实例
                ICryptoTransform transform = aes.CreateDecryptor();
                //解密
                byte[] final = transform.TransformFinalBlock(byte_encryptedData, 0, byte_encryptedData.Length);
                //生成结果
                string result = Encoding.UTF8.GetString(final); 
                return result;
            }
  • 相关阅读:
    [转]HTML5 classList API
    高质量CSS编写规范
    CSS Hack
    谈谈JSON数据格式
    Eclipse启动时报需要安装"Java SE 6 Runtime"致无法启动解决方案
    站长问题纠结
    做站长的经验
    网站如何提高PR值
    Progit Update Check Page
    WPF随手小记之二 ——改变DataGrid样式
  • 原文地址:https://www.cnblogs.com/zyh1989/p/9278832.html
Copyright © 2020-2023  润新知