在 C# 中使用 SHA1 对字符串进行哈希处理

Sha*_*ood -3 c# sha1

我怎样才能获得SHA1 hash相当于网站http://www.sha1-online.com/生成的 C# 内容

我的示例字符串是

“20150819100015.test.1002-4-2015.978.GBP”

它的哈希字符串是

“caed6ade209e95ad973cce8def473f1e39e75c0b”

Dan*_*anL 5

注意:根据评论更新了我的答案,使其更具体地针对当前的问题。

哈希是字节数组上的计算机,并且由于字符串的字节数组表示取决于您正在使用的文本编码,因此可能无法回答您的问题。这是因为我们不知道http://www.sha1-online.com使用什么文本编码。

我在下面做了一个假设,即使用 UTF8 编码,因此虽然下面的示例代码将生成您在问题中指定的具有相应输入的哈希值,但它可能并不总是生成与http://www.sha1相同的哈希值-online.com用于其他给定的输入。

.NET Framework 提供 SHA1 的 3 个类实现,即 SHA1Cng、SHA1CryptoServiceProvider 和 SHA1Managed。

这些实现之间的主要区别在这里讨论使用哪一个:托管与非托管哈希算法,但我在下面的代码片段中使用了 SHA1Managed,因为它完全在托管代码中实现,因此虽然速度较慢,但​​应该更易于移植不同的平台。

哈希的输出也是一个字节数组,因此为了将哈希转换为文本表示形式,我已将字节转换为十六进制表示形式并将它们连接起来,因为这似乎是http://www.sha1-online的表示形式.com选择使用。

static void Main(string[] args)
{
    var sha1 = new System.Security.Cryptography.SHA1Managed();
    var plaintextBytes = Encoding.UTF8.GetBytes("20150819100015.test.1002-4-2015.978.GBP");
    var hashBytes = sha1.ComputeHash(plaintextBytes);

    var sb = new StringBuilder();
    foreach (var hashByte in hashBytes)
    {
        sb.AppendFormat("{0:x2}", hashByte);
    }

    var hashString = sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案有什么不正确的地方?不要在没有留下评论说明为什么它没有用的情况下投反对票。 (2认同)