• 微信小程序 获取用户信息 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;
            }
  • 相关阅读:
    JZOJ 3034. 【NOIP2012模拟10.17】独立集
    JZOJ 3035. 【NOIP2012模拟10.17】铁轨
    JZOJ 1259. 牛棚安排
    数位DP JZOJ 3316. 非回文数字
    JZOJ 3046. 游戏
    JZOJ 3013. 填充棋盘
    debian 安装oracle提供的java8
    java 汉字转拼音 PinYin4j
    debian ssh设置root权限登陆 Permission denied, please try again
    java并发下订单生成策略
  • 原文地址:https://www.cnblogs.com/zyh1989/p/9278832.html
Copyright © 2020-2023  润新知