c# - 生成密码哈希

标签 c# sql winforms hash

<分区>

对于我的登录系统,我希望对数据库中的密码进行哈希处理。所以我决定阅读有关散列的知识以及如何做,但不幸的是它对我来说没有任何意义,因为我找不到我想要的例子。

我想要它,以便在创建用户帐户时,对密码进行散列处理并存储在我的数据库中,然后当他们登录时,它对登录密码进行散列处理并使用数据库中的散列密码进行检查。如果这有任何意义,我将不胜感激。

如果您需要我的代码示例或其他内容,请提出,我会将其编辑到我的问题中。

最佳答案

您可以使用哈希算法,例如 MD5SHA1SHA265SHA512 ...散列密码。例如:

public string Hash(string password)
{
    var bytes = new UTF8Encoding().GetBytes(password);
    var hashBytes = System.Security.Cryptography.MD5.Create().ComputeHash(bytes);
    return Convert.ToBase64String(hashBytes);
}

然后将密码的哈希值存储在数据库中,当你想将输入的密码与数据库存储的值进行比较时,将输入值的哈希值与数据库值进行比较。

编辑

考虑使用 SHA256SHA512而不是 MD5 :

public string Hash(string password)
{
    var bytes = new UTF8Encoding().GetBytes(password);
    byte[] hashBytes;
    using (var algorithm = new System.Security.Cryptography.SHA512Managed())
    {
        hashBytes = algorithm.ComputeHash(bytes);
    }
    return Convert.ToBase64String(hashBytes);
}

这只是一个简单的示例:在真实场景中,您也应该使用 salt 作为哈希值。您可以阅读更多关于盐腌的信息 here .

关于c# - 生成密码哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33546552/

相关文章:

sql - SSIS 结果集、Foreachloop 和变量

c# - 将 System.Drawing.Icon 转换为 System.Media.ImageSource

c# - 防止访问已处置的引用

c# - Windows XP/Server 2003/VS 2010 上的 CefSharp

c# - 找不到类型命名空间名称 IdentityUser

sql - 按时间范围删除数据存储中的行

c# - 事件处理程序性能

c# - 将文件扩展名关联到 C# 应用程序中的应用程序

c# - 从 App_Data 中的文件获取 XML 数据并将其转换为 IQueryable<MyModel> 的最有效方法?

mySQL - 根据不同列对 2 行进行分组