2011-04-01 57 views
2

我寫我自己的定義成員資格提供,但使用的會員供給者自己EncodePassword方法,如下所示是:成員資格提供EncodePassword方法.NET 4.0

internal string EncodePassword(string pass, int passwordFormat, string salt) 

{ 
if (passwordFormat == 0) // MembershipPasswordFormat.Clear 
    return pass; 

byte[] bIn = Encoding.Unicode.GetBytes(pass); 
byte[] bSalt = Convert.FromBase64String(salt); 
byte[] bAll = new byte[bSalt.Length + bIn.Length]; 
byte[] bRet = null; 

Buffer.BlockCopy(bSalt, 0, bAll, 0, bSalt.Length); 
Buffer.BlockCopy(bIn, 0, bAll, bSalt.Length, bIn.Length); 
if (passwordFormat == 1) 
{ // MembershipPasswordFormat.Hashed 
    HashAlgorithm s = HashAlgorithm.Create(Membership.HashAlgorithmType); 
    bRet = s.ComputeHash(bAll); 
} else 
{ 
    bRet = EncryptPassword(bAll); 
} 

return Convert.ToBase64String(bRet); 
} 

我現在知道打獵逛了幾個小時後,在.NET 4中,使用的算法是HMACSHA256。我知道我需要一個密鑰才能正確工作。

我的問題是如何做到這一點?

是否將密鑰放在配置文件中並以某種方式引用它?

任何幫助,將不勝感激!

謝謝。

回答

2

不要使用SHA !.去和下載BCrypt.Net。 SHA在散列時速度太快,這使得任何加密的東西都容易暴力破解。由於可配置的工作因素,BCrypt速度較慢,因此雖然用戶無法接受,但當嘗試扯扯每秒700米按鍵時,您根本無法做到。

一旦bcrypt所有你需要做的哈希值是:

private static readonly int BCRYPT_WORK_FACTOR = 10; 
string hashedPassword = BCrypt.Net.BCrypt.HashPassword(account.HashedPassword, BCRYPT_WORK_FACTOR); 

,並檢查密碼:

bool matched = BCrypt.Net.BCrypt.Verify(password, match.HashedPassword)) 

我在這裏http://www.danharman.net/2011/06/25/encrypting-hashing-passwords-for-your-website/

多一點深入的書面這件事
相關問題