[英]sha1 Hash Not working? C#
我只是在搞混簡單的哈希,因為我是這個想法的新手,我有以下幾點:
public string Password {get;set;}
public static string Hash(string password)
{
return FormsAuthentication.HashPasswordForStoringInConfigFile(password, "sha1");
}
public bool Authenticate(AccountDataContext context)
{
var password = context.UserAccounts.FirstOrDefault(p => p.UserAccountUID == UserAccountUID).Password;
var hash = Hash(Password);
return password.Equals(hash);
}
注意這不是生產代碼,因此我不擔心當前的安全性...
現在,當我最初在用戶注冊時哈希密碼時,如下所示
var password = "Password";
var hashedPassword = UserAccount.Hash(password)
然后,我將其存儲給用戶。
當我對用戶進行身份驗證時,我將調用Authenticate()方法,並且我認為它會返回相同的哈希,因為它將相同的值傳遞給Hash()方法,但是它們的結果不同。
有什么想法為什么Hash函數會為同一字符串返回兩個不同的哈希值?
在這種情況下,我不能完全確定,但是通常情況下,您不僅會散列密碼,還會散列密碼和保存在旁邊的其他一些隨機噪聲(通常稱為salt-value)。 這樣做是為了使這一切比單獨的密碼更加安全。 如果僅存儲密碼,則攻擊者可能只對字典進行哈希處理並找到大量接受的密碼。 我想幕后也在發生同樣的事情。
您是否考慮過自己哈希密碼(System.Security)而不是使用FormAuthentication-Service?
看一下SHA1Managed .ComputeHash方法。 基本上,您只是使用UnicodeEncoding.GetBytes或任何您想要的東西將字符串編碼為字節數組,然后調用此方法以獲取哈希的字節數組。 比起您可以用Convert.ToBase64String轉換它來返回一個字符串-這是我所說的, 沒有鹽,因此您可以在投入生產之前閱讀此內容。
在多次調用該函數期間,散列結果將相同。 您可能需要在哈希之前調用String.Trim(),以確保在哈希之前字符串中的任何地方都沒有空格。
您發布的代碼段也不應閱讀:
public bool Authenticate(AccountDataContext context)
{
var password = context.UserAccounts.FirstOrDefault(p => p.UserAccountUID == UserAccountUID).Password;
var hash = Hash(password); //lower case password, not Password.
return password.Equals(hash);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.