2017-10-04 26 views
0

我们有一个传统的桌面应用程序,它在用户表中存储纯文本密码。我在asp.net mvc 4.5上创建了相同的web版本。我如何手动散列密码就像asp.net身份一样

我使用的是asp.net标识2.0,并且虚拟地将aspnet用户表表连接到用户表。我通过运行一个脚本来插入用户表中的所有用户到aspnet用户表表中,并且两个表中的ID保持相同。 [我甚至无法在现有表格中添加单列以使其与asp.net身份一致。]

我们的要求是密码对于网络和桌面应用程序都是相同的。

现在我的问题是如何创建所有这些密码的哈希,并把它们放入密码哈希表aspnetusers表。 asp.net身份如何做到这一点?我可以运行一个触发器,并重新计算我的aspnet用户表表的哈希值?

+0

你有没有想出解决办法? – RyanCJI

+0

是的,我在这里找到它:https://stackoverflow.com/questions/20621950/asp-net-identity-default-password-hasher-how-does-it-work-and-is-it-secure – Samra

回答

0

我找到了答案here

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); 
}