2013-06-08 20 views
20

文字列があり、C#を使用してSHA-256ハッシュ関数でハッシュしたい。私はこのようなものが欲しい:文字列のSHA-256文字列を取得する

string hashString = sha256_hash("samplestring"); 

これを行うためのフレームワークに何かが組み込まれていますか?

+1

http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256.aspx。 -1。 –

+2

ハッシュは文字列ではなくバイトで動作します。だからまず文字列をバイトに変換するエンコーディングを選択する必要があります。私はこれにUTF-8をお勧めします。 – CodesInChaos

+0

この投稿を読んでいる人は、次のことも確認する必要があります。https://stackoverflow.com/questions/4948322/fundamental-difference-between-hashing-and-encryption-algorithms – Ziezi

答えて

65

実装は、その

public static String sha256_hash(String value) { 
    StringBuilder Sb = new StringBuilder(); 

    using (SHA256 hash = SHA256Managed.Create()) { 
    Encoding enc = Encoding.UTF8; 
    Byte[] result = hash.ComputeHash(enc.GetBytes(value)); 

    foreach (Byte b in result) 
     Sb.Append(b.ToString("x2")); 
    } 

    return Sb.ToString(); 
} 

編集のように考えられます。LINQの実装は、おそらく、読みにくく簡潔以上ですが、

public static String sha256_hash(String value) { 
    using (SHA256 hash = SHA256Managed.Create()) { 
    return String.Concat(hash 
     .ComputeHash(Encoding.UTF8.GetBytes(value)) 
     .Select(item => item.ToString("x2"))); 
    } 
} 

編集2 : .NETコア

public static String sha256_hash(string value) 
{ 
    StringBuilder Sb = new StringBuilder(); 

    using (var hash = SHA256.Create())    
    { 
     Encoding enc = Encoding.UTF8; 
     Byte[] result = hash.ComputeHash(enc.GetBytes(value)); 

     foreach (Byte b in result) 
      Sb.Append(b.ToString("x2")); 
    } 

    return Sb.ToString(); 
} 
+0

ハッシュをどのように復号化してパスワードに戻しますか? –

+6

@daniel metlitski:あなたは*できません::ハッシュは*片方向関数*ですが、ハッシュを計算することはできますが、引数を取り戻すことはできません。新しいユーザーを登録するときは、パスワードではなくそのハッシュを保存します。提供されたパスワードでハッシュを計算し、ハッシュと格納されたハッシュを比較します。 –

+0

すべてがクールですが、命名規則はひどいです - ローカル変数は大文字、メソッド名は小文字です - ここでは夕方の良い講義です: https://docs.microsoft.com/en-us/dotnet/standard/design-ガイドライン/一般的な命名規則 –

関連する問題