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);
}
我相信这应该能回答您的问题。
我正在构建一个使用 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);
}
我相信这应该能回答您的问题。