【问题标题】:Generate password hash [closed]生成密码哈希[关闭]
【发布时间】:2016-02-06 09:43:43
【问题描述】:

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

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

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

【问题讨论】:

  • 我想你的意思是加密解密你的密码?也许您只是在查找错误的术语(“哈希”),从而导致混淆?
  • 有一个很好的答案here 这可能就是你想要的。
  • @ThorstenKettner 我不确定,我读到您应该散列而不是加密和解密?
  • 我的错,对不起。看到 DrewJordan 的链接和 Reza Aghaei 的回答,您可能是对的。我根本不知道哈希是用来验证密码的。
  • 如果您希望散列密码并将其存储在您的数据库中,请同时查找 salt。它使散列更加安全。

标签: c# sql winforms hash


【解决方案1】:

您可以使用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

【讨论】:

  • 仍然可以使用 MD5 吗?我听到各种各样的事情......
  • @DrewJordan 不,bcrypt 绝对是一个更好的选择。
  • @image597 只需使用参数查询并将Hash(passwordTextBox.Text) 作为@Password 的值传递
  • @DrewJordan 我添加了使用 SHA512Managed 的​​示例代码。但是对于 bcrypt,OP 应该使用 BCrypt.NetBCryptCreateHash windows api fnction。希望对您有所帮助。
  • @Reza Aghaei 我不同意,有人会询问散列的原因是为了安全,否则他们只会以明文形式保存密码。以及如何散列几乎属于SO。如果出于安全原因我们已经建议不要使用 MD5,那么让读者一起走上一条好的道路并建议他们考虑使用 Salt 作为他们的哈希值是没有坏处的。
猜你喜欢
  • 1970-01-01
  • 2020-11-13
  • 2015-05-12
  • 2018-12-20
  • 2010-12-08
  • 2013-05-14
  • 2017-10-15
  • 2021-05-14
  • 1970-01-01
相关资源
最近更新 更多