初次遇到須要數據解密的地方是在「獲取手機號」,前端組件調用後得到的是加密數據,須要發送到服務端進行解密。html
對於解密算法,微信官方文檔有如下說明:前端
官方文檔提供了一些示例,可是沒有C#的,不過不要緊,此算法 .NET Core BCL包含了的,使用很是簡單。下面我封裝了一個方法:算法
/// <summary> /// 解密微信數據 /// </summary> /// <param name="encryptedData">加密的數據</param> /// <param name="encryptIv">iv向量</param> /// <param name="sessionKey">調用 wx auth.code2Session 來得到</param> /// <returns></returns> public static string WechatDecrypt(string encryptedData, string encryptIv, string sessionKey) { //base64解碼爲字節數組 var encryptData = Convert.FromBase64String(encryptedData); var key = Convert.FromBase64String(sessionKey); var iv = Convert.FromBase64String(encryptIv); //建立aes對象 var aes = Aes.Create(); if (aes == null) { throw new InvalidOperationException("未能獲取Aes算法實例"); } //設置模式爲CBC aes.Mode = CipherMode.CBC; //設置Key大小 aes.KeySize = 128; //設置填充 aes.Padding = PaddingMode.PKCS7; aes.Key = key; aes.IV = iv; //建立解密器 var de = aes.CreateDecryptor(); //解密數據 var decodeByteData = de.TransformFinalBlock(encryptData, 0, encryptData.Length); //轉換爲字符串 var data = Encoding.UTF8.GetString(decodeByteData); return data; }
須要注意的點:小程序
1.SessionKey是小程序登陸過程當中,調用 auth.code2Session 接口返回的。api
2.加密數據和iv向量是微信一塊兒返回的數組
3.這三個值必須匹配,一個不對都會形成解密失敗微信