C# 比较散列密码 (Pbkdf2)
C# compare hashed password (Pbkdf2)
我正在 .Net Core 中开发身份验证。
我有 api 创建一个用户名和密码。
我对密码进行了哈希处理,但我没有找到任何方法来将经过哈希处理的密码与用户的新输入进行比较。
我用的是微软给的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));
当用户登录时,他发送登录名和密码。
我不知道如何将此密码与数据库中的散列密码进行比较?
如果我再次对密码进行哈希处理,它将是一个不同的哈希值,所以这无济于事
有什么建议吗?
我很惊讶我没有找到关于这个的答案:(
谢谢!
UserInout:明文==>发送到认证服务,
创建账户:生成salt,给明文密码哈希,存储在账户信息中
验证:从您数据库中的帐户信息中读取散列值,将给定的明文密码与读取盐进行散列,并将该散列值与您数据库中的散列值进行比较。这是最简单的身份验证方法。
请务必始终使用为每个帐户创建的单独哈希,否则哈希将始终不同并且身份验证将失败。
我正在 .Net Core 中开发身份验证。 我有 api 创建一个用户名和密码。
我对密码进行了哈希处理,但我没有找到任何方法来将经过哈希处理的密码与用户的新输入进行比较。
我用的是微软给的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));
当用户登录时,他发送登录名和密码。 我不知道如何将此密码与数据库中的散列密码进行比较?
如果我再次对密码进行哈希处理,它将是一个不同的哈希值,所以这无济于事
有什么建议吗? 我很惊讶我没有找到关于这个的答案:(
谢谢!
UserInout:明文==>发送到认证服务,
创建账户:生成salt,给明文密码哈希,存储在账户信息中
验证:从您数据库中的帐户信息中读取散列值,将给定的明文密码与读取盐进行散列,并将该散列值与您数据库中的散列值进行比较。这是最简单的身份验证方法。
请务必始终使用为每个帐户创建的单独哈希,否则哈希将始终不同并且身份验证将失败。