SimpleMembershipProvider.EncryptPassword 是如何工作的?

How does SimpleMembershipProvider.EncryptPassword work?

我正在构建一个使用 SimpleMembershipProvider 的应用程序。我必须写一些关于如何创建新用户的东西。现在我必须写关于加密密码的内容(并添加引文)。

当我创建一个新用户时,我只是使用WebSecurity.CreateUserAndAccount方法。它会自动将用户和他的密码存储到数据库中,并且还会对他的密码进行加密。

这里用的是什么机制?我在互联网上找不到任何相关信息。

是否使用了 Rfc2898DeriveBytes class?

你会发现,如果你遍历调用堆栈,你最终会在 SimpleMembershipProvider.CreateAccount(string, string, bool)

此方法调用 string hashedPassword = Crypto.HashPassword(password);,其中 Crypto 是辅助程序 class。

This method 如下所示:

public static string HashPassword(string password)
{
    if (password == null)
    {
        throw new ArgumentNullException("password");
    }

    // Produce a version 0 (see comment above) password hash.
    byte[] salt;
    byte[] subkey;
    using (var deriveBytes = new Rfc2898DeriveBytes(password, SaltSize, PBKDF2IterCount))
    {
        salt = deriveBytes.Salt;
        subkey = deriveBytes.GetBytes(PBKDF2SubkeyLength);
    }

    byte[] 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);
}

我相信这应该能回答您的问题。