如何以与 asp.net 身份核心 v2.2.1 相关的格式散列密码



所以我想使用与核心身份 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函数用盐创建哈希,将哈希与存储的哈希进行比较。

这样每次您散列

相同的密码时,您都会得到 不同的散列密码 .

相关内容

  • 没有找到相关文章

最新更新