文字列があり、C#を使用してSHA-256ハッシュ関数でハッシュしたい。私はこのようなものが欲しい:文字列のSHA-256文字列を取得する
string hashString = sha256_hash("samplestring");
これを行うためのフレームワークに何かが組み込まれていますか?
文字列があり、C#を使用してSHA-256ハッシュ関数でハッシュしたい。私はこのようなものが欲しい:文字列のSHA-256文字列を取得する
string hashString = sha256_hash("samplestring");
これを行うためのフレームワークに何かが組み込まれていますか?
実装は、その
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();
}
ハッシュをどのように復号化してパスワードに戻しますか? –
@daniel metlitski:あなたは*できません::ハッシュは*片方向関数*ですが、ハッシュを計算することはできますが、引数を取り戻すことはできません。新しいユーザーを登録するときは、パスワードではなくそのハッシュを保存します。提供されたパスワードでハッシュを計算し、ハッシュと格納されたハッシュを比較します。 –
すべてがクールですが、命名規則はひどいです - ローカル変数は大文字、メソッド名は小文字です - ここでは夕方の良い講義です: https://docs.microsoft.com/en-us/dotnet/standard/design-ガイドライン/一般的な命名規則 –
http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256.aspx。 -1。 –
ハッシュは文字列ではなくバイトで動作します。だからまず文字列をバイトに変換するエンコーディングを選択する必要があります。私はこれにUTF-8をお勧めします。 – CodesInChaos
この投稿を読んでいる人は、次のことも確認する必要があります。https://stackoverflow.com/questions/4948322/fundamental-difference-between-hashing-and-encryption-algorithms – Ziezi