【问题标题】:Using SHA1 in C# for Hashing string [duplicate]在 C# 中使用 SHA1 处理字符串 [重复]
【发布时间】:2015-11-12 13:10:22
【问题描述】:

我怎样才能在 C# 中获得 SHA1 hash 相当于由站点 http://www.sha1-online.com/ 产生的效果

我的示例字符串是

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

它的哈希字符串是

“caed6ade209e95ad973cce8def473f1e39e75c0b”

【问题讨论】:

  • 不要使用 SHA-1。它坏了,然后消失了。
  • @Fred 当然,但有时您需要与遗留系统或维护不善的系统交互。
  • @CodeCaster,真的。只是警告,以防万一。

标签: c# sha1


【解决方案1】:

注意:更新了我的答案,以便在向 cmets 反映后更具体地解决手头的问题。

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

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

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

这里讨论了这些实现之间的主要区别Which one to use: Managed vs. NonManaged hashing algorithms,但我已经习惯了在下面的代码 sn-p 中使用 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();
}

【讨论】:

  • 这个答案有什么不正确的地方?不要在没有评论为什么它没有用的情况下投反对票。
  • 没有任何解释的“在这里,我写了你的代码”转储不被认为是一个很好的答案。
  • Ops 的问题是“如何在 C# 中获得 SHA1 哈希值,相当于由站点 生成”。正如您所建议的那样,“在这里,我编写了您的代码”不是一个好方法,但它不会使这种方法无效。我相信我的方法是有道理的,因为它是一项相对简单的任务,而且 Op 是特定于语言的,所以这样一个简单的代码 sn-p 就可以满足所需的目的。如果操作员自己尝试了一些事情并且没有得到相同的答案(例如,因为他使用了错误的编码),那么我的答案将有理由得到解释。但是它简洁是有用的。
  • 我并不是说这是一个无效的答案。如果是,它将被标记并删除。我是说这不是一个 的答案,至少如您所见,至少有两个用户。您正在假设 UTF8(可以是任何与 ASCII 兼容的编码)并且您正在使用 SHA1Managed 类,您可以在答案中解释这一点。为零努力重复的问题提供可复制粘贴的代码似乎也让人们感到厌烦。
  • 所以你没有找到有用的答案,至少很清楚。在重复问题的答案做出相同假设的情况下将答案标记为重复似乎是虚伪的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多