2017-10-04 28 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); 
}