繁体   English   中英

在C#中使用SHA1算法进行哈希处理

[英]Hashing with SHA1 Algorithm in C#

我希望使用SHA1算法使用SHA1Managed来散列给定的byte[]数组。
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的哈希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/991863

    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

我会把帽子放在这里:

(作为静态类的一部分,因为这个代码片段是两个扩展)

//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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM