那天在調試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));
}
