我如何像asp.net身份一样手动散列密码

Sam*_*mra 4 mysql asp.net-mvc hash asp.net-identity

我们有一个遗留的桌面应用程序,它在用户表中存储纯文本密码。我在 asp.net mvc 4.5 上创建了相同的 web 版本。

我正在使用 asp.net 身份 2.0,并将aspnetusers表虚拟链接到用户表。我通过运行一个脚本来实现这一点,该脚本将用户表中的所有用户插入到aspnetusers表中,并且两个表中的 id 保持相同。[我什至无法在现有表中添加一列以使其与 asp.net 身份一起使用。]

我们的要求是 Web 和桌面应用程序的密码相同。

现在我的问题是如何创建所有这些密码的散列并将它们放入aspnetusers表的密码散列中。asp.net 身份是如何做到的?我可以在 sql 中复制相同的机制,以便每当用户表中发生密码更改时,我可以运行触发器并重新计算我的aspnetusers表的哈希值吗?

Sam*_*mra 7

我在这里找到了答案

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);
}
Run Code Online (Sandbox Code Playgroud)