2016-10-31 24 views
0

我需要在數據庫中存儲用戶名和密碼。密碼顯然應該被加密。我們確實有一些其他網站用來加密密碼的舊代碼,但我不確定這是否安全。Asp.net Core PasswordHasher <T>問題

我正在研究使用Asp.net Core PasswordHasher類。

我如下使用它:

PasswordHasher<string> pw = new PasswordHasher<string>(); 

    string s1 = pw.HashPassword("Bob", "Apple"); 
    string s2 = pw.HashPassword("Bob", "Apple"); 

    var v1 = pw.VerifyHashedPassword("Bob", s1, "Apple"); 
    var v2 = pw.VerifyHashedPassword("Bob", s2, "Apple"); 

V1和V2是成功的,但由於某種原因S1和S2是不相等的(隨機鹽吧?)。

PasswordHasher以任何方式綁定到機器上?應用程序將在Web場中運行,因此它應該與機器無關並在場中的所有計算機上進行驗證。

這是存儲密碼的密碼安全方式嗎?

回答

3
  • 每個散列都有一個密碼安全的鹽。
  • 鹽被加在散列之前。
  • 它沒有以任何方式鏈接到機器上。

在它使用PBKDF2引擎蓋,與SHA256和10,000次重複,除非你使用V2兼容性(不要使用V2兼容性,除非你有)

您可以使用它調用到raw function,如果你不想拉入身份,但你應該堅持相同的算法和迭代計數。

+1

關於原始函數調用:我使用ASP.NET核心數據保護堆棧創建了獨立(不依賴於Identity)密碼散列器:https://github.com/henkmollema/CryptoHelper。 –

2

這是設計;每個哈希密碼都有一個隨機鹽。

這可以防止攻擊者看到用戶是否擁有相同的密碼。