0

aspnet_Membership テーブルを使用してパスワードを保存する ZNode を実装しているクライアントがいます。このテーブルには、暗号化されたパスワード、パスワード ソルトが含まれており、2 の「PasswordFormat」を使用しています。私が収集したものから、「2」は回復可能な暗号化されたパスワードです。

ColdFusion サーバーは BlueDragon 9 Alpha です。BD を知らなくても心配いりません。ColdFusion がサポートするものはすべて「動作するはず」であり、CF 10 でテストすることもできます。

これを行うためのより良い方法を知っていれば、私はすべて耳にします。ユーザー/パスワードを作成し、ColdFusion を介して ASP メンバーシップ テーブルに保存できるようにする必要があります。さらに、ログイン用のユーザー/パスワードを確認できる必要があります。

Web.config ファイルを見ると、ZnodeMembershipProvider は「System.Web.Security.SqlMembershipProvider」タイプです。

machineKey エントリは次のようになります: (2 つのキー値を取り出します)

<machineKey decryption="AES" 
     decryptionKey="[64 character string]" 
     validation="SHA1" 
     validationKey="[128 character string]"/>

私がこのようなことをしようとすると:

Encrypt('myPassword', '[64 character string]', 'AES', 'Base64')

「指定されたキーは、このアルゴリズムに対して有効なサイズではありません」と表示されます。

私は暗号化や .NET にあまり詳しくありません。前もって感謝します。

4

2 に答える 2

0

DNN (Dot Net Nuke) authenticationについて私が書いたこの回答は、うまくいくはずです。(ACF と BD の間に違いがないと仮定します)。基本的に、.NET と CF が暗号化を処理する方法にほとんど違いはありません。主な違いは次のとおりです。

  1. エンコーディング:
    • .NET の使用UTF-16LE
    • CF は常に を使用しUTF-8ます。encryptBinaryACF では、これはの代わりに を使用する必要があることを意味しますencrypt。(OBDについてはわかりません)。

  2. キー形式:

    • .NET は 16 進数を使用します
    • CF は通常 base64 を使用するため、最初にキーを変換する必要がある場合があります。

  3. 暗号化モード:

    • .NET のデフォルトはCBCモード (IV が必要)
    • CF のデフォルトECB(IV は不要)

他のリンクが停止した場合の完全な例を次に示します。を使っています3DESが、基本的な考え方は も同じですAES注: Java では、Sun Unlimited Strength Jurisdiction ポリシー ファイルがインストールされている場合にのみ、より大きなキー サイズ (つまり 192,256)を使用できます。

3DES の例:

// sample valus
plainPassword = "password12345";
base64Salt    = "x7le6CBSEvsFeqklvLbMUw==";
hexDecryptKey = "303132333435363738393031323334353637383930313233";

// first extract the bytes of the salt and password
saltBytes = binaryDecode(base64Salt, "base64");
passBytes = charsetDecode(plainPassword, "UTF-16LE" );

// next combine the bytes. note, the returned arrays are immutable, 
// so we cannot use the standard CF tricks to merge them   
// NOTE: If BlueDragon does not include "org.apache.commons...."
// just loop through the arrays and merge them manually
ArrayUtils = createObject("java", "org.apache.commons.lang.ArrayUtils");
dataBytes = ArrayUtils.addAll( saltBytes, passBytes );

// convert DNN hex key to base64 for ColdFusion
base64Key  = binaryEncode(binaryDecode( hexDecryptKey, "hex"),  "base64");

// create an IV and intialize it with all zeroes
// block size:  16 => AES, 8=> DES or TripleDES 
blockSize = 8; 
iv = javacast("byte[]", listToArray(repeatString("0,", blocksize)));

// encrypt using CBC mode 
bytes = encryptBinary(dataBytes, base64Key, "DESede/CBC/PKCS5Padding", iv);

// result: WBAnoV+7cLVI95LwVQhtysHb5/pjqVG35nP5Zdu7T/Cn94Sd8v1Vk9zpjQSFGSkv 
WriteOutput("encrypted password="& binaryEncode( bytes, "base64" ));
于 2013-08-15T17:35:41.647 に答える