2009-02-25 15 views
1

PHPで次のASP.Netプロセスを元に戻す必要があるため、チケットのユーザー名と有効期限を知ることができます。私は3DES暗号化を解読しましたが(下記のステップ3)、私は次に何をする必要があるのか​​分かりません。解読結果の文字列はバイト配列ですか?それをアスキーに変換できるはずですか? (そうでないので)。 (私は気にしない)PHPでフォーム認証チケットの内容を取得するには

  1. のSerializeユーザ名、有効期限、その他のデータ:ASP.Netがチケットを作成するために何

    。バイト配列を作成します。

  2. SHA1を使用してチケットにサインします(sigは最後の20バイトです)
  3. 3DES(これは暗号化されていません)でチケットを暗号化します。

    6E 85 A4 39 71 31 46 BB A3 F6は1A 07 EE A4 CE 5F 03 C8 D1 4C 97 5D 6A 52 D1 C4 82 75 BE:私は戻って、このようなものを得る

5E 53 06 7B 1D D2 4D BF 22 40 F7 F4 B8 8D B0 C3 EC E5 BE F7 52 C2 DF 00 7A D1 CB BC 76 4B 10 33 2D 1A B4 15 A7 BB D6 9D BF 41 69 D2 C4 43 4A 26 95 01 F2 06 AA 46 2C 96 CC AD DC 08 59 C0 64 B6 EE 2C 5F CA ED 8B 92 1C 80 FD FF DC 61 67 28 59 CB E6 71 C6 C3 72 0E D0 32 69 22 57 4E 40 2B DA 67 BA 7F F1 C5 78 BC DF 80 8C D8 F2 8B 19 E2 A4 4F 7C 8C D9 97 37 BD B5 5B 0A 66 9B DD E7 DC 7B 78 F4 F8

これはasciiにマップされません。次に何をしますか?私はSHA1検証鍵を持っています。助けてくれてありがとう!私はこれが可能だとは思わない

答えて

2

私はこれを試してきましたが、PHPでフォーム認証チケットの内容を取得できました。

  1. チケットを.Net側で暗号化するのに使用したのと同じキーで復号化します。このため、私はhttp://www.navioo.com/php/docs/function.mcrypt-encrypt.phpを使用しています。

  2. 復号化では、文字列の最後にパディングが追加されますが、削除します。

  3. 最後に20バイトのSHA1ハッシュを含む文字列が残っています。これらの最後の20バイト(必要)は、文字列の最初の部分のSHA1ハッシュと一致します(文字列長 - 20バイト)。私はまだこの部分について作業しています。.NETがバイト配列をSHA1ハッシュ化できるデータの単一の集まりに変換する方法を理解しようとしています(PHP側でも同じことができます)。

これは本当にすべてです。

+1

そして、どのように復号化されたデータのうち、ユーザ名を取得するのですか? – Tarnschaf

2

...

いくつかの前提条件の質問:

  • はあなたが正しいMachineKey値は、文字列を正しく復号化されていることを確認されており、解読アルゴリズム? ASP.NET 1.0は3DESを使用していましたが、新しいバージョンでは一般的にデフォルトでAESが使用されています。
  • なぜこのデータに最初にアクセスしていますか? FormsAuthenticationTicketは「壊れた」ものではありませんでした。異なる言語からこれらの値にアクセスする場合は、独自の計画を検討することを検討してください。

いくつかの注目すべき所見:

in FormsAuthentication.Decrypt()埋没はUnsafeNativeMethods.CookieAuthParseTicket(...)への呼び出しです。

[DllImport("webengine.dll", CharSet=CharSet.Unicode)] 
internal static extern int CookieAuthParseTicket(byte[] pData, int iDataLen, StringBuilder szName, int iNameLen, StringBuilder szData, int iUserDataLen, StringBuilder szPath, int iPathLen, byte[] pBytes, long[] pDates); 

これは、バイト配列がMachineKeySection.HexStringToByteArray()から返されるように見えるもの解析しFormsAuthenticationTicketの個々のメンバーの中に(UTF-8を使用して文字列をデコードするように見える明らかに機能):ここでは署名です。

どのようなデコード方法(ASCII、UTF-16など)を使用していても、このネイティブメソッドで隠されたMicrosoftの実装が分からない限り、データを取得しないと仮定できます。

MSDNも役立つ場合があります。

1

ASP.NETで使用されるAES暗号化は、常にPHPのmcrypt用語では16バイトのブロックサイズ(MCRYPT_RIJNDAEL_128)で、CBCモードが使用されることに注意してください。キーの長さ(ASP.NETのデフォルトでは32バイト/ 256ビット)は、提供された実際のキーからPHPによって決定されます。また、IVがすべて0でない限り、復号化されたデータの先頭が破損しているように見えます(つまり、 "\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 ")。データを復号化する方法の詳細については

、以下を参照してくださいhttp://www.codeproject.com/KB/aspnet/Forms_Auth_Internals.aspx

関連する問題