Asp.net @aspnet_成员身份_CreateUser的密码
应用:Nerddinner 此SP用于为新创建的用户插入密码。我试图找出@Password在应用程序代码中的来源,因为它是提供给这个SP的。 我在应用程序级别上查找它,但在应用程序级别上找不到它。有人知道SP在应用程序中用于传递@Password的位置吗Asp.net @aspnet_成员身份_CreateUser的密码,asp.net,Asp.net,应用:Nerddinner 此SP用于为新创建的用户插入密码。我试图找出@Password在应用程序代码中的来源,因为它是提供给这个SP的。 我在应用程序级别上查找它,但在应用程序级别上找不到它。有人知道SP在应用程序中用于传递@Password的位置吗 ALTER PROCEDURE [dbo].[aspnet_Membership_CreateUser] @ApplicationName nvarchar(256),
ALTER PROCEDURE [dbo].[aspnet_Membership_CreateUser]
@ApplicationName nvarchar(256),
@UserName nvarchar(256),
@Password nvarchar(128),
@PasswordSalt nvarchar(128),
@Email nvarchar(256),
@PasswordQuestion nvarchar(256),
@PasswordAnswer nvarchar(128),
@IsApproved bit,
@CurrentTimeUtc datetime,
@CreateDate datetime = NULL,
@UniqueEmail int = 0,
@PasswordFormat int = 0,
@UserId uniqueidentifier OUTPUT
CreateUser SP由成员资格类调用。在代码中找不到它。但如果愿意,您可以覆盖它。MS就是这样做的:
internal string EncodePassword(string pass, int passwordFormat, string salt)
{
if(passwordFormat == 0) // MembershipPasswordFormat.Clear
return pass;
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);
if(passwordFormat == 1)
{ // MembershipPasswordFormat.Hashed
HashAlgorithm s = HashAlgorithm.Create(Membership.HashAlgorithmType);
bRet = s.ComputeHash(bAll);
}
else
{
bRet = EncryptPassword(bAll);
}
return Convert.ToBase64String(bRet);
}
我想检查代码的原因是,我想看看代码是如何在应用程序级别生成“哈希”密码和密码salt的。CreateUser重载列表:正如您所看到的,没有重载方法接受密码salt。它是自动创建的。