byte[]
を使用してSHA1
アルゴリズムを使用して、指定されたSHA1Managed
配列をハッシュします。byte[]
ハッシュは単体テストから取得されます。
予想されるハッシュは、0d71ee4472658cd5874c5578410a9d8611fc9aef
(大文字と小文字が区別されます)です。
どうすればこれを達成できますか?
public string Hash(byte [] temp)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
}
}
ハッシュの「標準」テキスト形式が必要な場合は、次のようなものを使用できます。
static string Hash(string input)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(input));
var sb = new StringBuilder(hash.Length * 2);
foreach (byte b in hash)
{
// can be "x2" if you want lowercase
sb.Append(b.ToString("X2"));
}
return sb.ToString();
}
}
これにより、0C2E99D0949684278C30B9369B82638E1CEAD415
のようなハッシュが生成されます。
または、ゴルフバージョンのコードの場合:
static string Hash(string input)
{
var hash = new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input));
return string.Concat(hash.Select(b => b.ToString("x2")));
}
public string Hash(byte [] temp)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(temp);
return Convert.ToBase64String(hash);
}
}
編集:
次のように、バイト配列を文字列に変換するときにエンコードを指定することもできます。
return System.Text.Encoding.UTF8.GetString(hash);
または
return System.Text.Encoding.Unicode.GetString(hash);
これは私が行ったものです。最適化する場合は、 https://stackoverflow.com/a/624379/99186 をご覧ください。
public static string Hash(string stringToHash)
{
using (var sha1 = new SHA1Managed())
{
return BitConverter.ToString(sha1.ComputeHash(Encoding.UTF8.GetBytes(stringToHash)));
}
}
ComputeHash
を使用して、「指定されたバイト配列の値を計算」できます。
var hash = sha1.ComputeHash(temp);
結果を文字列表現で分析する場合は、{0:X2}
形式指定子を使用してバイトをフォーマットする必要があります。
最速の方法はこれです:
public static string GetHash(string input)
{
return string.Join("", (new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input))).Select(x => x.ToString("X2")).ToArray());
}
小さい文字の出力には、x2
の代わりにX2
を使用します
ここに帽子を投げます:
(このスニペットは2つの拡張機能であるため、静的クラスの一部として)
//hex encoding of the hash, in uppercase.
public static string Sha1Hash (this string str)
{
byte[] data = UTF8Encoding.UTF8.GetBytes (str);
data = data.Sha1Hash ();
return BitConverter.ToString (data).Replace ("-", "");
}
// Do the actual hashing
public static byte[] Sha1Hash (this byte[] data)
{
using (SHA1Managed sha1 = new SHA1Managed ()) {
return sha1.ComputeHash (data);
}