Ben*_*Ben 2 membership asp.net passwords format
我正在使用ASP.Net SqlMembershipProvider来管理我的用户.这是我的配置:
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="SiteDatabase"
applicationName="WPR"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
passwordFormat="Hashed" />
</providers>
</membership>
Run Code Online (Sandbox Code Playgroud)
我的问题是:当我调用Membership.CreateUser来创建新用户时,密码以散列格式存储在数据库中,并带有一个盐 - 这一切都很好.但是,当我在管理功能中调用Membership.ChangePassword时,它以纯文本格式存储密码.我真的无法理解这种行为,因为配置清楚地说"Hashed"并且创建新用户会创建一个哈希密码.
在ChangePassword()默认ASPMembership提供程序的方法中,从数据库中检索现有用户的密码格式,该格式是用于编码现有用户的新密码的格式,而不是设置的密码格式,web.config现在可以指定一种不同的格式.您可以通过下载默认提供程序的源代码来自行查看.
我的问题是,密码是否以明文形式存储给已经以明文形式存储密码的用户?您可以通过检查表中用户的PasswordFormat字段的值来轻松检查此问题aspnet_Membership.价值观是:
Clear = 0,
Hashed = 1,
Encrypted = 2,
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您需要自己散列清除密码,框架代码可能会派上用场
// generate a salt
public string GenerateSalt()
{
byte[] buf = new byte[16];
(new RNGCryptoServiceProvider()).GetBytes(buf);
return Convert.ToBase64String(buf);
}
// hashes the password, using the supplied salt
public string HashPassword(string pass, string salt)
{
byte[] bIn = Encoding.Unicode.GetBytes(pass);
byte[] bSalt = Convert.FromBase64String(salt);
byte[] bAll = new byte[bSalt.Length + bIn.Length];
byte[] bRet = null;
Buffer.BlockCopy(bSalt, 0, bAll, 0, bSalt.Length);
Buffer.BlockCopy(bIn, 0, bAll, bSalt.Length, bIn.Length);
// this assumes a Hashed password (PasswordFormat = 1)
HashAlgorithm s = HashAlgorithm.Create( Membership.HashAlgorithmType );
bRet = s.ComputeHash(bAll);
return Convert.ToBase64String(bRet);
}
Run Code Online (Sandbox Code Playgroud)
现在您只需要从PasswordFormat = 0的数据库中提取所有记录,通过控制台应用程序运行它们以散列密码并将salt,哈希密码保存到数据库,以及将PasswordFormat字段更新为1
| 归档时间: |
|
| 查看次数: |
6681 次 |
| 最近记录: |