簡體   English   中英

如何對用戶密碼進行哈希處理?

[英]How to hash users passwords?

請不要將其標記為重復項,因為我已經檢查了多個帖子,但是它們都沒有幫助我。

Asp.net MVC-如何對密碼進行哈希處理

C#中的哈希和鹽密碼

我正在建立一個具有登錄頁面的網站,並且閱讀了這篇文章

https://www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right#normalhashing

有關如何確保我的登錄安全的信息。

現在我了解到,在每次注冊時,我必須創建CSPRNGs(加密安全的偽隨機數生成器)並將其添加到用戶提交的密碼中,然后對該混合進行哈希處理並將其存儲在數據庫中,並為每個用戶存儲鹽,因為每個用戶都是隨機的。 我的問題是什么是最簡單,最簡單的方法。

在我的控制器中,我通過這種方法獲取用戶名和密碼

public JsonResult Login(LoginModel data)
{  
   //some code...
   //...
}

我的登錄模型包含

public class LoginModel
{
    public string Username { get; set; }
    public string Password { get; set; }
}

所以我得到的用戶名和密碼像(字符串a = data.Username,...)

我已經將其添加到我的項目中,但是我不知道如何從這里繼續

using System.Security.Cryptography;

我肯定知道如何保存在數據庫中,如何隨機分配鹽(可能使用RNGCryptoServiceProvider),以及如何將其添加到用戶密碼中,然后對最終結果進行哈希處理。 謝謝你的幫助。

每個“如何安全地對密碼進行散列”問題的答案都是相同的: 不知道 您從事的是制作獨特網站的業務,而不是安全業務。 您不知道自己在做什么,也不會知道自己在做錯什么。 直到您的數據庫以一種或另一種方式泄漏出去,然后您就為時已晚,對此采取任何措施,從而損害了用戶的安全。

您可以使用經過充分研究,經過嚴格保護的維護代碼來存儲用戶登錄名。 使用ASP.NET MVC時,可以使用ASP.NET Identity 你不要自己滾。 期。

您可以使用諸如此類的方法添加鹽和對密碼進行哈希處理。 在這里,我們向方法發送一個字符串。 從本質上講,這就是當您使用登錄部分創建用戶時,實體框架散列密碼的方式。

    public static string EncodePassword(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);
    }//Entity Framework default way 

上面的用法using System.Security.Cryptography; system.Buffer

我是這樣做的,並且工作正常。

我增加了一個新班

public class Helper
{

    public String CreateSalt(int size)
    {
        var rng = new RNGCryptoServiceProvider();
        var buff = new byte[size];
        rng.GetBytes(buff);
        return Convert.ToBase64String(buff);
    }
    public String GenerateSha256Hash(string input, string salt)
    {
        byte[] bytes = System.Text.Encoding.UTF8.GetBytes(input + salt);
        SHA256Managed shaString = new SHA256Managed();
        byte[] hash = shaString.ComputeHash(bytes);

        return BitConverter.ToString(hash);
    }

}

}

在我的控制器中,我添加了此類的一個實例

Helper myHelper = new Helper();

然后我將值傳遞給

string salt = myHelper.CreateSalt(5);
string hashedPassword = myHelper.GenerateSha256Hash(*PasswordField*, salt);
hashedPassword = hashedPassword.Replace("-", string.Empty).Substring(0, 16);

我要從哈希密碼中刪除“-”,然后使用前16個字符。

感謝@Luke Joshua Park,@ gusto2,@ JamesS和@CodeCaster的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM