当前位置:  开发笔记 > 编程语言 > 正文

如何重写SHA1制作的密码哈希(在ASP.NET身份中)?

如何解决《如何重写SHA1制作的密码哈希(在ASP.NET身份中)?》经验,为你挑选了0个好方法。

我在我的网站上使用SHA1来记录密码.我正在尝试迁移到ASP.NET身份.我发现如何验证旧密码(ASP.NET Identity默认密码Hasher,它是如何工作的并且是否安全?):

public class CustomPasswordHasher : IPasswordHasher
{
 //....
  public static bool VerifyHashedPassword(string hashedPassword, string password)
  {
    byte[] buffer4;
    if (hashedPassword == null)
    {
        return false;
    }
    if (password == null)
    {
        throw new ArgumentNullException("password");
    }
// Old hash verification
    using (SHA1Managed sha1 = new SHA1Managed())
    {
      var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(password));
      var sb = new StringBuilder(hash.Length * 2);

      foreach (byte b in hash)
      {
          sb.Append(b.ToString("x2"));
      }

      if(hashedPassword == sb.ToString()) return true;
      else return false;
    }

// Identity hash verification
    byte[] src = Convert.FromBase64String(hashedPassword);
    if ((src.Length != 0x31) || (src[0] != 0))
    {
        return false;
    }
    byte[] dst = new byte[0x10];
    Buffer.BlockCopy(src, 1, dst, 0, 0x10);
    byte[] buffer3 = new byte[0x20];
    Buffer.BlockCopy(src, 0x11, buffer3, 0, 0x20);
    using (Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(password, dst, 0x3e8))
    {
        buffer4 = bytes.GetBytes(0x20);
    }
        return ByteArraysEqual(buffer3, buffer4);
  }
//....
}

在我的自定义ApplicationUserManager中,我设置了PasswordHasher属性:

//....
manager.PasswordHasher = new CustomPasswordHasher();
//....

现在,我想删除旧的哈希(sha1)并保存新的哈希.我怎么能这样做?

提前致谢!

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有