1. 程式人生 > 實用技巧 >微信解密encryptedDataStr獲取使用者資訊

微信解密encryptedDataStr獲取使用者資訊

A:<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
B:<button open-type="getUserInfo" lang="zh_CN" bindgetphonenumber="getuserInfo"></button>

注意:

如果你用A請求的方法返回的資訊是手機號,用B請求的返回的是使用者基本資訊 ,open-type決定

方法:
  /// <summary>
/// 解密encryptedDataStr
/// </summary>

/// <param name="session_key"></param>
/// <param name="iv"></param>
/// <param name="encryptedDataStr"></param>
/// <returns></returns>
public static string AES_decrypt(string session_key, string iv, string encryptedDataStr)
{
if (session_key == "undefined" || iv == "undefined" || encryptedDataStr == "undefined")
{
return "404";
}
else
{
RijndaelManaged rijalg = new RijndaelManaged();
//-----------------
//設定 cipher 格式 AES-128-CBC
rijalg.KeySize = 128;
rijalg.Padding = PaddingMode.PKCS7;
rijalg.Mode = CipherMode.CBC;
rijalg.Key = Convert.FromBase64String(session_key);
rijalg.IV = Convert.FromBase64String(iv);
byte[] encryptedData = Convert.FromBase64String(encryptedDataStr);
//解密
ICryptoTransform decryptor = rijalg.CreateDecryptor(rijalg.Key, rijalg.IV);
string result;
using (MemoryStream msDecrypt = new MemoryStream(encryptedData))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
result = srDecrypt.ReadToEnd();
}
}
}
return result;
}

}