我如何手动哈希密码,就像ASP.NET Identity一样?

7
我们有一个传统的桌面应用程序,将明文密码存储在用户表中。我创建了一个基于 asp.net mvc 4.5 的 Web 版本。
我正在使用 asp.net identity 2.0,并已经将 aspnetusers 表与用户表进行了虚拟链接。我通过运行一个脚本,将用户表中的所有用户插入到 aspnetusers 表中,并且这两个表中的 ids 保持相同。 [我甚至无法向现有表中添加单个列以使其与 asp.net identity 协同工作。]
我们的要求是,Web 和桌面应用程序的密码将相同。
现在我的问题是如何对所有这些密码进行哈希处理,并将它们放入 aspnetusers 表的密码哈希中。asp.net identity 是如何做到的? 我能否在 SQL 中复制相同的机制,以便每当发生密码更改时,我都可以运行触发器并重新计算我的 aspnetusers 表的哈希值?

你最终解决了这个问题吗? - RyanCJI
1
是的,我在这里找到了它:https://dev59.com/mWIj5IYBdhLWcg3wHhpX - Samra
2个回答

9
我在这里找到了答案。
public static string HashPassword(string password)
{
  byte[] salt;
  byte[] buffer2;
  if (password == null)
  {
      throw new ArgumentNullException("password");
  }
  using (Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(password, 0x10, 0x3e8))
  {
    salt = bytes.Salt;
    buffer2 = bytes.GetBytes(0x20);
  }
  byte[] dst = new byte[0x31];
  Buffer.BlockCopy(salt, 0, dst, 1, 0x10);
  Buffer.BlockCopy(buffer2, 0, dst, 0x11, 0x20);
  return Convert.ToBase64String(dst);
}

使用ASP.NET Core Identity 2.2,此代码生成的哈希值与Identity保存的相同密码的哈希值不同。 - Matias Masso


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接