98

を使用してアルゴリズムをbyte[]使用して、指定された配列をハッシュしたい。 ハッシュは単体テストから取得されます。 予想されるハッシュは(大文字と小文字が区別されます) です。SHA1SHA1Managed
byte[]
0d71ee4472658cd5874c5578410a9d8611fc9aef

どうすればこれを達成できますか?

public string Hash(byte [] temp)
{
    using (SHA1Managed sha1 = new SHA1Managed())
    {

    }
}
4

6 に答える 6

42
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);
于 2013-06-25T08:21:32.920 に答える
19

これは私が行ったものです。最適化したい方は、https://stackoverflow.com/a/624379/991863をご覧ください。

    public static string Hash(string stringToHash)
    {
        using (var sha1 = new SHA1Managed())
        {
            return BitConverter.ToString(sha1.ComputeHash(Encoding.UTF8.GetBytes(stringToHash)));
        }
    }
于 2015-12-21T16:38:48.003 に答える
9

最速の方法はこれです:

    public static string GetHash(string input)
    {
        return string.Join("", (new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input))).Select(x => x.ToString("X2")).ToArray());
    }

x2の代わりに使用する小さな文字出力用X2

于 2016-08-14T14:22:22.310 に答える
4

私はここに私の帽子を投げます:

(このスニペットは 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);
}
于 2015-06-18T23:02:38.520 に答える