【发布时间】:2026-01-01 14:10:01
【问题描述】:
我正在 .Net Core 中开发身份验证。 我有 api 来创建一个带有登录名和密码的用户。
我对密码进行了哈希处理,但我找不到任何方法将哈希密码与用户的新输入进行比较。
我用的是microsoft给出的hash方法:
// generate a 128-bit salt using a secure PRNG
byte[] salt = new byte[128 / 8];
using (var rng = RandomNumberGenerator.Create())
{
rng.GetBytes(salt);
}
/// hashed will be stored in the DataBase as password
string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
password: password,
salt: salt,
prf: KeyDerivationPrf.HMACSHA1,
iterationCount: 10000,
numBytesRequested: 256 / 8));
当用户登录时,他会发送登录名和密码。 我不知道如何将此密码与数据库中的哈希密码进行比较?
如果我再次对密码进行哈希处理,它将是一个不同的哈希值,所以这无济于事
有什么建议吗? 我很惊讶我没有找到关于这个的答案:(
谢谢!
【问题讨论】:
-
“如果我再次对密码进行哈希处理,它将是一个不同的哈希值”——这就是问题所在。您需要完全按照您第一次的方式进行散列。这里显然有些不同。
-
您需要存储盐和哈希。然后,当提供密码时,您使用存储的盐重新计算哈希,并将结果与存储的哈希进行比较。就是这么简单。
-
谢谢!这就是解决方案。我将每个帐户的盐存储在数据库中。
标签: c# .net password-hash pbkdf2