2016-11-22 4 views
0

DOTNETコア 内の文字列をハッシュするとき、私は奇妙な結果を得る:Computing SHA1 with ASP.NET Core をして、これは私のコードでどのようにconvert a byte array to string .NETコア使うSHA-1、.NETのコアで、私はこれと同様の問題を発見した

で発見しました:

private static string CalculateSha1(string text) 
{ 
    var enc = Encoding.GetEncoding(65001); // utf-8 code page 
    byte[] buffer = enc.GetBytes(text); 

    var sha1 = System.Security.Cryptography.SHA1.Create(); 

    var hash = sha1.ComputeHash(buffer); 

    return enc.GetString(hash); 
} 

、これは私のテストで:

string test = "broodjepoep"; // forgive me 

string shouldBe = "b2bc870e4ddf0e15486effd19026def2c8a54753"; // according to http://www.sha1-online.com/ 

string wouldBe = CalculateSha1(test); 

System.Diagnostics.Debug.Assert(shouldBe.Equals(wouldBe)); 

出力:

MHnѐ&ȥGS

enter image description here

私は(V 4.3.0)nugetパッケージSystem.Security.Cryptography.Algorithmsがインストールされている。またGetEncoding(0)にしてみました

sysのデフォルトのコーディングを取得します。また、動作しませんでした。

+1

ビットオフトピックが、SHA-1は廃止されている(例えばhttps://blog.qualys.com/ssllabs/2014/を見ます09/09/sha1-deprecation-what-you-need-know-knowとhttps://blogs.windows.com/msedgedev/2016/04/29/sha1-deprecation-roadmapなど)を使用してください。強力な暗号が必要な場合は、SHA-1から離れるべきです。 – YSK

+0

私は知っていますが、私が使用している外部サービスにそれを教えてください;-)(オランダの銀行) –

答えて

3

「SHA-1 Online」がハッシュを表す方法はわかりませんが、ハッシュであるため、(UTF8)文字列で表現できない文字を含めることができます。

var hashString = Convert.ToBase64String(hash); 

Convert.FromBase64String()を使用し、バックバイト配列に変換する:私はあなたが簡単に文字列にバイト配列のハッシュを表現するためにConvert.ToBase64String()を使用するほうだと思う

var bytes = Convert.FromBase64String(hashString); 

も参照してください:Converting a md5 hash byte array to a string。これは、文字列にハッシュを表現する複数の方法を示しています。たとえば、hash.ToString("X")は16進表現を使用します。

broodjepoepのための名誉。 :-)

+0

ありがとう、base64はほぼ正しいです。 http://imgur.com/a/CnJbr –

+0

@ JPHellemons「SHA-1 Online」がハッシュを文字列に変換するためにどのようなメソッドを使用するのか分かりません。アプリケーションがどの形式であるかを知っている限り、問題はありません。 –

+0

@JPHellemons:hash.ToString( "X") 'を試しましたか? – Tseng

1

これまでの問題の解決策:

var enc = Encoding.GetEncoding(0); 

byte[] buffer = enc.GetBytes(text); 
var sha1 = SHA1.Create(); 
var hash = BitConverter.ToString(sha1.ComputeHash(buffer)).Replace("-",""); 
return hash; 
+0

これまでのところ、問題の解決方法は? @Henk Mollemaはこの22 nov 2016に答えました。 –

関連する問題