所以我想使用与核心身份 v2.2.1 相同的算法对密码进行哈希处理 asp.net 但我的代码生成的哈希与核心身份 v2.2.1 生成的哈希完全不同 asp.net
例如,12345678的哈希是
AGhTgD39ivyJtpe0pKALKjE+HwO4FSr8N08yVM/+BslSVEXWpDZj9CC0BVY5V8Xrdw==
但是我的代码生成的哈希
ADwuhmrych2Y2OQpFsSRNjLkFWMnj++Czyp0NFMe7oZBU9noN5B4bXyopljBNLs7mQ==
我需要一个哈希函数,以相同的格式生成哈希,任何帮助都值得赞赏
public string HashPwd(string password)
{
int Pbkdf2IterCount = 1000; // default for Rfc2898DeriveBytes
int Pbkdf2SubkeyLength = 256 / 8; // 256 bits
int SaltSize = 128 / 8;
if (password == null)
{
throw new ArgumentNullException("password");
}
// Produce a version 0 (see comment above) text hash.
byte[] salt;
byte[] subkey;
using (var deriveBytes = new Rfc2898DeriveBytes(password, SaltSize, Pbkdf2IterCount))
{
salt = deriveBytes.Salt;
subkey = deriveBytes.GetBytes(Pbkdf2SubkeyLength);
}
var outputBytes = new byte[1 + SaltSize + Pbkdf2SubkeyLength];
Buffer.BlockCopy(salt, 0, outputBytes, 1, SaltSize);
Buffer.BlockCopy(subkey, 0, outputBytes, 1 + SaltSize, Pbkdf2SubkeyLength);
return Convert.ToBase64String(outputBytes);
}
每个散列密码都有一个随机盐。您正在使用 Rfc2898DeriveBytes 函数,该函数生成哈希和盐。盐和哈希(盐在哈希前面(链接在一起,然后编码为哈希密码。
验证密码时,会从存储的散列密码中提取盐,使用Rfc2898DeriveBytes函数用盐创建哈希,将哈希与存储的哈希进行比较。
这样每次您散列相同的密码时,您都会得到 不同的散列密码 .