【问题标题】:SHA1(c#) - different result from .Net 3 and .Net CoreSHA1(c#) - 与 .Net 3 和 .Net Core 不同的结果
【发布时间】:2020-10-18 17:58:24
【问题描述】:

我在数据库中有哈希值。这是在 Asp Web Form(可能是 .Net 3)中创建的。这是旧代码:

string hash = SHA1(SHA1(pass.Trim() + number.Trim()));

这些是数据示例:

 pass = AGent24022 
 number = 24022
 hash = 2cdfaec91e938eaa7f432fd606745c23399cc3b8

我需要在 Asp Net Core 中根据这些数据生成这个哈希值。但我无法得到这个值。这些是我的一些实现的示例。

 //1
    static string Hash2(string input)
    {
      return string.Join("",SHA1CryptoServiceProvider.Create().ComputeHash(Encoding.UTF8.GetBytes(input)).Select(x => 
     x.ToString("x2")));
    }
 
       //2
     static string Hash1(string input){ 
      using (var sha1 = new SHA1Managed())
      {
           return BitConverter.ToString(sha1.ComputeHash(Encoding.UTF8.GetBytes(input)));
      }
    }

        //3
        static string Hash0(string input)
        {
            var hash = new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input));
            return string.Concat(hash.Select(b => b.ToString("x2")));
        }

这是我的用途:

 string input = pass.Trim() + number.Trim();
 var res = Hash0(Hash0(input);
 //var res = Hash1(Hash1(input);
 //var res = Hash2(Hash2(input);
 

也许原因是实现方式发生了变化。任何建议,我将不胜感激。

【问题讨论】:

  • 您的原件有一个额外的“数字”,我在您的新代码中没有看到。而且您的原始代码似乎两次应用了 SHA1,或者?
  • 谢谢,我修复了我的源代码示例
  • 我看到你在第一次通话时打了两次SHA1SHA1(SHA1("yourString"))
  • 是的,这个逻辑用在旧代码中

标签: c# asp.net .net-core cryptography sha


【解决方案1】:

.NET 字符串默认为 UTF-16,因此旧实现中会使用该字符串。

如果您采用 Hash2 实现并将 Encoding.UTF8 更改为 Encoding.Unicode(编码为 UTF-16),那么它应该可以工作。

class Program
{
    static string Hash(string input)
    {
        using (var sha1 = new SHA1Managed())
        {
            return string.Join("", SHA1CryptoServiceProvider.Create().ComputeHash(Encoding.Unicode.GetBytes(input)).Select(x => x.ToString("x2")));
        }
    }

    static void Main(string[] args)
    {
        var result = Hash(Hash("AGent2402224022"));
        Console.Write(result); // outputs "2cdfaec91e938eaa7f432fd606745c23399cc3b8"
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多