那天在調試API的時候,發現用c#寫的SHA1加密出來的結果和PHP中sha1()出來的不一樣,找了半天的原因後來才弄出來 在調試微信介面的時候大多的幫助文檔都是提供的是PHP的方法,所以在.net中實現的時候會出現很多的問題,最典型的就是token通不過驗證 現在提供一個結果與Php一樣 的SHA
那天在調試API的時候,發現用c#寫的SHA1加密出來的結果和PHP中sha1()出來的不一樣,找了半天的原因後來才弄出來
在調試微信介面的時候大多的幫助文檔都是提供的是PHP的方法,所以在.net中實現的時候會出現很多的問題,最典型的就是token通不過驗證
現在提供一個結果與Php一樣 的SHA1方法
public static string Sha1Sign(string data) { byte[] temp1 = Encoding.UTF8.GetBytes(data); SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider(); byte[] temp2 = sha.ComputeHash(temp1); sha.Clear(); // 註意, 不能用這個 // string output = Convert.ToBase64String(temp2);// 不能直接轉換成base64string var output = BitConverter.ToString(temp2); output = output.Replace("-", ""); output = output.ToLower(); return output; }
解決方式:在php中sha1出來的是小寫字母,可是在c#中預設出來的是大寫,在token驗證的時候也是區分大小寫的,另外很多人在
// string output = Convert.ToBase64String(temp2);// 不能直接轉換成base64string var output = BitConverter.ToString(temp2);
這裡犯了錯誤卻一直沒有發現,所以找了很久的原因
PS:
在送上一個Php的
base64_encode的c#實現
public static string Base64_encode(string data) { return Convert.ToBase64String(Encoding.UTF8.GetBytes(data)); }