PHP の C# と SHA1 の暗号化結果が異なる場合の解決策
その日 API をデバッグしていたときに、C# で記述された SHA1 暗号化の結果が PHP の sha1() の結果と異なることに気づきました。長い間理由を探していましたが、今わかりました。
WeChat インターフェイスをデバッグする場合、ほとんどのヘルプ ドキュメントでは PHP メソッドが提供されているため、.net で実装すると多くの問題が発生します。最も典型的なのは、トークンが検証に合格できないことです。
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# ではデフォルトでは大文字が使用され、トークン検証でも大文字と小文字が区別されます。また、多くの人がここで間違いを犯していますが、発見できていないため、私は調べてきました。
// string output = Convert.ToBase64String(temp2);// 不能直接转换成base64string var output = BitConverter.ToString(temp2);
public static string Base64_encode(string data) { return Convert.ToBase64String(Encoding.UTF8.GetBytes(data)); }