3

我正在编写一个登录系统,它将登录 DotNetNuke 应用程序的数据库。我可以访问数据库并且可以读取 aspnet_Membership 表中的 PasswordSalt。因此,我将有输入:

  1. 用户密码(通过表单提交)
  2. 用户的盐(我可以查)

我必须生成哈希密码作为输出。PasswordFormat=2,即“加密”。但是,我无法找到正在使用的加密算法的详细信息,因此我可以在自己的应用程序中重写它。到目前为止,我的研究导致了这个页面:

http://msdn.microsoft.com/en-us/library/aa478949.aspx

还有这个 SO post,其中一个评论中有以下公式:

Convert.ToBase64String((new Rfc2898DeriveBytes(YourPWD, YourSALT)).GetBytes(20))

但是,这个公式似乎不适用于我的测试数据,它具有以下输入和输出:

  1. 密码:888888
  2. 盐:ahEvjCX3FM04S5cSi1qdHA==
  3. 哈希密码: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)));
        }
}

谢谢你的帮助!

更新

在这里回答:ASP.NET MembershipProvider——它究竟是如何进行加密的?

4

1 回答 1

0

查看源代码,他们有一个名为的类AspNetMembershipProvider,其中有一个名为UserLogin. UserLogin调用一个名为的私有方法ValidateUser,该方法又使用 ASP.NET Membership 提供程序,因此它实际上在内部调用此方法Membership.ValidateUser

因此,如果您使用用户名和密码调用相同的方法,成员资格提供程序将处理密码散列并返回一个布尔值,指示密码是否匹配。

于 2012-09-14T16:00:19.893 回答