DotNetNuke如何散列其密码?

时间:2012-09-14 06:02:04

标签: c# dotnetnuke

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

  1. 用户密码(以表格提交)
  2. 用户的盐(我可以查找)
  3. 我必须生成散列密码作为输出。 PasswordFormat = 2,即“加密”。但是,我无法找到正在使用的加密算法的细节,因此我可以在自己的应用程序中重写它。到目前为止,我的研究已经进入了这个页面:

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

    以及this SO post,其中一条评论中包含以下公式:

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

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

    1. 密码:888888
    2. 盐:ahEvjCX3FM04S5cSi1qdHA ==
    3. 哈希密码:y3rxLUDYdj1 / + IGC94 / tvW6M3pQTCi / 9bq1cNOUgYlM =
    4. 您可以在此处查看我的测试: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?

1 个答案:

答案 0 :(得分:0)

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

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