C#语言版:解密微信小程序中的加密信息(以wx.getUserInfo获取的encryptedData为例)
·
在微信小程序开发中,用户敏感数据(如openid、unionid、手机号等)通常以加密形式返回,开发者需通过后端解密获取明文。本文以C#语言实现微信小程序wx.getUserInfo接口返回的encryptedData解密流程,结合官方加密规范与实际开发经验,提供完整的解决方案。
一、解密核心原理
微信小程序采用AES-128-CBC算法对数据进行加密,关键参数包括:
SessionKey:会话密钥,通过wx.login接口获得临时登录凭证code后调用微信服务器端网址(GET https://api.weixin.qq.com/sns/jscode2session)获取,详细操作请参考官方文档。
IV:初始向量,与加密数据一同返回。
PKCS7填充:数据块不足时填充规则,确保解密后正确去除冗余字节。
二、C#语言版解密代码
以wx.getUserInfo为例,该API可以返回“iv”、“encryptedData”等信息,其中encryptedData为包含有用户openid、unionid等敏感信息的加密数据,也就是需要解密的数据,解密后会返回一个json对象。
/// <summary>解密WxApi获取到的加密数据</summary>
/// <param name="encryptedData">加密数据,如wx.getUserInfo获取的encryptedData对象</param>
/// <param name="iv">加密算法的初始向量,如wx.getUserInfo获取的iv对象</param>
/// <param name="sessionKey">session_key,通过wx.login获取登录凭证后调用微信服务器端网址(GET https://api.weixin.qq.com/sns/jscode2session)获取</param>
/// <returns>文本格式的json对象</returns>
public string DecryptWx(string encryptedData,string iv,string sessionKey) {
byte[] encryptedDataBytes = Convert.FromBase64String(encryptedData);
byte[] keyBytes = Convert.FromBase64String(sessionKey);
byte[] ivBytes = Convert.FromBase64String(iv);
using (Aes aes = Aes.Create()) {
aes.Key = keyBytes;
aes.IV = ivBytes;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
using (ICryptoTransform decryptor = aes.CreateDecryptor()) {
try{
byte[] decryptedBytes = decryptor.TransformFinalBlock(encryptedDataBytes, 0, encryptedDataBytes.Length);
return Encoding.UTF8.GetString(decryptedBytes);
} catch {
return "";
}
}
}
}
更多推荐


所有评论(0)