生成密码哈希

ima*_*597 3 c# sql hash winforms

对于我的登录系统,我希望在我的数据库中散列密码.所以我决定读一下哈希以及怎么做但不幸的是它对我来说没有任何意义,因为我找不到我想要的例子.

我想要它,以便在创建用户帐户时,密码被哈希并存储在我的数据库中,然后当它们登录时,它会哈希登录密码并使用数据库中的哈希密码进行检查.如果这有任何意义,我会很感激帮助.

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

Rez*_*aei 9

您可以使用散列算法一样MD5,SHA1,SHA265,SHA512,...哈希密码.例如:

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

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

编辑

考虑使用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);
}
Run Code Online (Sandbox Code Playgroud)

这只是一个简单的例子:在实际场景中,你也应该使用a salt作为哈希.你可以在这里阅读更多关于盐渍的信息.

  • @DrewJordan我添加了使用SHA512Managed的示例代码.但是对于bcrypt,OP应该使用[BCrypt.Net](https://bcrypt.codeplex.com/)或[BCryptCreateHash](https://msdn.microsoft.com/en-us/library/windows/desktop/aa375383 (v = vs.85).aspx)windows api fnction.希望你觉得它有用. (2认同)
  • @Reza Aghaei我不同意,有人会问哈希的原因是为了安全,否则他们只会用明文保存他们的密码.以及如何散列几乎属于SO.如果出于安全原因我们已经准备好反对MD5,那么将读者放在一条良好的道路上并且建议他们考虑使用Salt作为他们的哈希是不会有害的. (2认同)