我正在编写一个登录系统,它将登录 DotNetNuke 应用程序的数据库。我可以访问数据库并且可以读取 aspnet_Membership 表中的 PasswordSalt。因此,我将有输入:
- 用户密码(通过表单提交)
- 用户的盐(我可以查)
我必须生成哈希密码作为输出。PasswordFormat=2,即“加密”。但是,我无法找到正在使用的加密算法的详细信息,因此我可以在自己的应用程序中重写它。到目前为止,我的研究导致了这个页面:
http://msdn.microsoft.com/en-us/library/aa478949.aspx
还有这个 SO post,其中一个评论中有以下公式:
Convert.ToBase64String((new Rfc2898DeriveBytes(YourPWD, YourSALT)).GetBytes(20))
但是,这个公式似乎不适用于我的测试数据,它具有以下输入和输出:
- 密码:888888
- 盐:ahEvjCX3FM04S5cSi1qdHA==
- 哈希密码:y3rxLUDYdj1/+IGC94/tvW6M3pQTCi/9bq1cNOUgYlM=
你可以在这里看到我的测试: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)));
}
}
谢谢你的帮助!