当前位置: 首页 > 知识库问答 >
问题:

如何验证哈希密码?

酆光熙
2023-03-14

我使用以下代码使用PBKDF2对密码进行哈希:

private string HashPassword(string password)
        {
            // generate a 128-bit salt using a secure PRNG
            byte[] salt = new byte[128 / 8];
            using (var rng = RandomNumberGenerator.Create())
            {
                rng.GetBytes(salt);
            }

            // derive a 256-bit subkey (use HMACSHA1 with 10,000 iterations)
            string hashedPassword = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                password: password,
                salt: salt,
                prf: KeyDerivationPrf.HMACSHA1,
                iterationCount: 10000,
                numBytesRequested: 256 / 8));

            return hashedPassword;
        }

如何验证身份验证的密码?看来我需要拿到用来哈希密码的盐。我怎么拿到?请注意,我没有使用单独的字段来存储哈希。数据库中只存储散列密码。

共有1个答案

长孙兴德
2023-03-14

一种可能的选择是使用Microsoft.aspnet.Identity中的PasswordHasher。

c# prettyprint-override">var passwordHasher = new PasswordHasher();
var pass = "password";
var hash = passwordHasher.HashPassword(pass);
var isVerified = passwordHasher.VerifyHashedPassword(hash, pass) 
              != PasswordVerificationResult.Failed;
Console.WriteLine((isVerified ? "Verified" : "Not verified"));
 类似资料:
  • 我用哈希法通过了一个密码 这将密码作为哈希值存储到数据库中。但是当我试图通过 无论密码是否正确,它都会告诉我密码是正确的。有没有办法解决这个问题,所以我可以散列密码,但登录时输入(非散列)密码。

  • 问题内容: 最近,我一直在尝试在互联网上偶然发现的登录脚本上实现自己的安全性。在尝试学习如何制作自己的脚本以为每个用户生成盐的努力之后,我偶然发现了。 据我了解(基于本页的阅读内容),当您使用时,盐已经在行中生成。这是真的? 我的另一个问题是,吃2种盐不是很聪明吗?一个直接在文件中,另一个在数据库中?这样,如果有人破坏了数据库中的盐,您仍然直接在文件中保留了盐吗?我在这里读到,存储盐从来都不是一个

  • 每个人在建构 PHP 应用时终究都会加入用户登录的模块。用户的帐号及密码会被储存在数据库中,在登录时用来验证用户。 在存储密码前正确的 哈希密码 是非常重要的。密码的哈希操作是单向不可逆的,该哈希值是一段固定长度的字符串且无法逆向推算出原始密码。这就代表你可以哈希另一串密码,来比较两者是否是同一个密码,但又无需知道原始的密码。如果你不将密码哈希,那么当未授权的第三者进入你的数据库时,所有用户的帐号

  • 问题内容: 我需要解密密码。密码已使用功能加密。 现在,我们假设它存储在数据库中(有一个“用户”表,其中包含用户名,密码等),我需要登录:我必须查看用户输入的密码是否与存储在其中的加密密码匹配。数据库。 这是SQL代码… …但未加密,因此不等于表用户的密码字段中存储的内容… 所以,有一个使用?后解密的功能。还是应该更改我的加密方法?或者还有什么? 问题答案: Bcrypt是一种单向哈希算法,您无法

  • 问题内容: 我正在尝试为Laravel创建哈希密码。现在有人告诉我使用Laravel哈希帮助器,但我似乎找不到它,或者我的方向错误。 如何创建laravel哈希密码?在哪 编辑:我知道代码是什么,但我不知道在哪里以及如何使用它,因此它给了我哈希密码。如果得到哈希密码,则可以手动将其插入数据库 问题答案: 使用Bcrypt散列密码: 这将创建一个哈希密码。您可以在控制器中甚至在模型中使用它,例如,如

  • 简介 Laravel Hash facade 为存储用户密码提供了安全的 Bcrypt 和 Argon2 哈希。如果您使用 Laravel 应用程序中内置的 LoginController 和 RegisterController 类,则默认情况下它们将使用 Bcrypt 进行注册和身份验证。 {tip} Bcrypt 是哈希密码的理想选择,因为它的「加密系数」可以任意调整,这意味着生成哈希所需的