3

DotNetNuke アプリケーションのデータベースに対してログインするログイン システムを作成しています。データベースにアクセスでき、aspnet_Membership テーブルの PasswordSalt を読み取ることができます。したがって、入力として次のようになります。

  1. ユーザーのパスワード (フォームから送信)
  2. ユーザーのソルト (検索できます)

ハッシュ化されたパスワードを出力として生成する必要があります。「暗号化」された PasswordFormat=2。ただし、使用されている暗号化アルゴリズムの詳細を見つけることができなかったので、自分のアプリケーションで書き換えることができます。これまでのところ、私の研究はこのページにつながっています:

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

また、コメントの1つに次の式があるこのSO投稿:

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.ValidateUserを内部的に呼び出します。

したがって、ユーザー名とパスワードを指定して同じメソッドを呼び出すと、メンバーシップ プロバイダーがパスワードのハッシュを処理し、パスワードが一致するかどうかを示すブール値を返します。

于 2012-09-14T16:00:19.893 に答える