2010-02-03 31 views
2

我MSDN文章設在這裏以下:http://msdn.microsoft.com/en-us/library/aa302398.aspxASP.NET散列PW的+鹽混亂

我的困惑是在功能:

private static string CreatePasswordHash(string pwd, string salt) 
{ 
    string saltAndPwd = String.Concat(pwd, salt); 
    string hashedPwd = 
     FormsAuthentication.HashPasswordForStoringInConfigFile(
              saltAndPwd, "SHA1"); 
    hashedPwd = String.Concat(hashedPwd, salt); 
    return hashedPwd; 
} 

我的理解是: 1. CONCAT鹽和純文本pwd 2.使用sha1創建散列傳球 3.再次將鹽與最初含有鹽的散列密碼進行concat?

步驟3背後的推理是什麼? 我發現了一個與MSDN相同的函數,並且它省略了最後一個concat。

我只是不明白爲什麼MSDN版本中有最後一個concat操作。

回答

3

它使用哈希密碼存儲鹽,以便您可以簡單地從配置文件(或存儲它的任何位置)中提取整個事物,從最終獲取鹽,使用哈希值對其進行哈希處理,然後比較結果到配置的哈希密碼。如果您不在配置中存儲具有散列密碼的salt,則必須將其存儲在其他位置,並在執行測試時從中提取它以散列傳入的密碼。由於SHA1是固定的160位(20字節),因此只需跳過配置中散列密碼中的前20個字符即可輕鬆獲取salt。