微信小程序解密开放数据

  • A+

微信小程序解密开放数据

使用场景

  • 官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html
  • 微信小程序获取步数
  • 微信小程序获取用户手机号
  • 等需要进行解密的数据
  • 直接贴代码

    1. /// <summary>  
    2. /// 解密所有消息的基础方法  
    3. /// </summary>  
    4. /// <param name="sessionKey">储存在 SessionBag 中的当前用户 会话 SessionKey</param>  
    5. /// <param name="encryptedData">接口返回数据中的 encryptedData 参数</param>  
    6. /// <param name="iv">接口返回数据中的 iv 参数,对称解密算法初始向量</param>  
    7. /// <returns></returns>  
    8. public static string DecodeEncryptedData(string sessionKey, string encryptedData, string iv)  
    9. {  
    10.     var aesCipher = Convert.FromBase64String(encryptedData);  
    11.     var aesKey = Convert.FromBase64String(sessionKey);  
    12.     var aesIV = Convert.FromBase64String(iv);  
    13.   
    14.     var result = AES_Decrypt(encryptedData, aesIV, aesKey);  
    15.     var resultStr = Encoding.UTF8.GetString(result);  
    16.     return resultStr;  
    17. }  
    18.  
    19. #region 私有方法  
    20. private static byte[] AES_Decrypt(String Input, byte[] Iv, byte[] Key)  
    21. {  
    22.     RijndaelManaged aes = new RijndaelManaged();  
    23.     aes.KeySize = 128;//原始:256  
    24.     aes.BlockSize = 128;  
    25.     aes.Mode = CipherMode.CBC;  
    26.     aes.Padding = PaddingMode.PKCS7;  
    27.     aes.Key = Key;  
    28.     aes.IV = Iv;  
    29.     var decrypt = aes.CreateDecryptor(aes.Key, aes.IV);  
    30.     byte[] xBuff = null;  
    31.     using (var ms = new MemoryStream())  
    32.     {  
    33.         using (var cs = new CryptoStream(ms, decrypt, CryptoStreamMode.Write))  
    34.         {  
    35.             byte[] xXml = Convert.FromBase64String(Input);  
    36.             byte[] msg = new byte[xXml.Length + 32 - xXml.Length % 32];  
    37.             Array.Copy(xXml, msg, xXml.Length);  
    38.             cs.Write(xXml, 0, xXml.Length);  
    39.         }  
    40.         xBuff = decode2(ms.ToArray());  
    41.     }  
    42.     return xBuff;  
    43. }  
    44.   
    45. private static byte[] decode2(byte[] decrypted)  
    46. {  
    47.     int pad = (int)decrypted[decrypted.Length - 1];  
    48.     if (pad < 1 || pad > 32)  
    49.     {  
    50.         pad = 0;  
    51.     }  
    52.     byte[] res = new byte[decrypted.Length - pad];  
    53.     Array.Copy(decrypted, 0, res, 0, decrypted.Length - pad);  
    54.     return res;  
    55. }  
    56. #endregion  
    钰玺

    发表评论

    :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: