ホームページ  >  記事  >  バックエンド開発  >  C# と PHP の間で異なる SHA1 暗号化結果の解決策

C# と PHP の間で異なる SHA1 暗号化結果の解決策

WBOY
WBOYオリジナル
2016-06-13 12:28:451417ブラウズ

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);
追記:

base64_encode の PHP

C# 実装をお送りします

        public static string Base64_encode(string data)        {            return Convert.ToBase64String(Encoding.UTF8.GetBytes(data));        }

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。