我正在编写一个登录系统,它将登录DotNetNuke应用程序的数据库。我可以访问数据库,可以在aspnet_Membership表中读取PasswordSalt。因此,我将作为输入:
我必须生成散列密码作为输出。 PasswordFormat = 2,即“加密”。但是,我无法找到正在使用的加密算法的细节,因此我可以在自己的应用程序中重写它。到目前为止,我的研究已经进入了这个页面:
http://msdn.microsoft.com/en-us/library/aa478949.aspx
以及this SO post,其中一条评论中包含以下公式:
Convert.ToBase64String((new Rfc2898DeriveBytes(YourPWD, YourSALT)).GetBytes(20))
但是,此公式似乎不适用于我的测试数据,该测试数据具有以下输入和输出:
您可以在此处查看我的测试:http://ideone.com/EClO2
using System;
using System.Security.Cryptography;
public class Test
{
public static void Main()
{
Console.WriteLine(Convert.ToBase64String((new Rfc2898DeriveBytes("888888", System.Convert.FromBase64String("ahEvjCX3FM04S5cSi1qdHA=="))).GetBytes(20)));
}
}
感谢您的帮助!
在这里回答:ASP.NET MembershipProvider -- How exactly does it do encryption?
答案 0 :(得分:0)
查看源代码,他们有一个名为AspNetMembershipProvider
的类,它有一个名为UserLogin
的方法。 UserLogin
调用名为ValidateUser
的私有方法,后者又使用ASP.NET成员资格提供程序,因此它实际上在内部调用此方法Membership.ValidateUser。
因此,如果您使用用户名和密码调用相同的方法,则成员资格提供程序将处理密码哈希并返回一个布尔值,指示密码是否匹配。