我们有一个传统桌面应用程序,该应用程序将纯文本密码存储在用户表中。我已经在ASP.NET MVC 4.5上创建了相同的Web版本。
我使用的是ASP.NET Identity 2.0,并且实际上已链接到用户表链接 aspnetusers 表。我通过运行一个将所有用户从用户表插入 aspnetusers 表的脚本来做到这一点,并且在两个表中ID都保持不变。[我什至无法将单列添加到现有表中以使其与ASP.NET身份一起使用。]
我们的要求是Web和Desktop应用程序都相同。
现在我的问题是如何创建所有这些密码的哈希,并将它们放入 aspnetusers 表的密码哈希中。ASP.NET身份如何?我可以在SQL中复制相同的机制,以便每当密码更改发生在>用户表中时,我都可以运行触发器并重新计算我的 aspnetusers table?
我在这里找到答案
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);
}
基于 .net6 最新版本:https://github.com/mammadkoma/webapi/blob/master/webapi/webapi/utilities/passwordhasher.cs
使用:https://github.com/mammadkoma/webapi/blob/master/webapi/controllers/usercontroller/usercontroller.cs