0

対称暗号化を使用して、actionscript 3 (クライアント) から python (サーバー) にデータを渡そうとしています。

私が使用しているライブラリは as3crypto と pycrypto です。これらのライブラリを正しく使用しているかどうかはわかりません。

アクションスクリプト 3:

private function testOnInit():void {
  var t_toEnc:String = 'testtest';
  var t_byAry:ByteArray = Hex.toArray( Hex.fromString( t_toEnc ) );
  var t_key:ByteArray = Hex.toArray( Hex.fromString( 'Thisisthekey' ) );
  var t_cbc:CBCMode = new CBCMode( new BlowFishKey( t_key ), new NullPad );
  var t_enc:String;
  t_cbc.IV = Hex.toArray( '30313233' );
  t_cbc.encrypt( t_byAry );
  t_enc = Base64.encodeByteArray( t_byAry );      
  dbg( 'b64 encrypted string ' + t_enc ); //this is just a debugging function we use in our code.
}

これは、上記の関数の base64 でエンコードされた出力です。

xvVqLzV5TU4=

ここで、pycrypto ライブラリの同じキー、初期化ベクトル、およびアルゴリズムを使用すると、異なる出力が得られます。

パイソン:

from Crypto.Cipher import Blowfish
B = Blowfish.new( 'Thisisthekey', Blowfish.MODE_CBC, '30313233' )
S = 'testtest'
X = B.encrypt( S )
import base64
Y = base64.b64encode( X )
print Y

I82NQEkSHhE=

両方のライブラリで「testtest」をbase64エンコードして同じ出力を受け取ることができるため、暗号化プロセスに何か問題があると確信しています。

アクションスクリプト 3:

var b:ByteArray = new ByteArray();
b.writeUTFBytes( 'testtest' );
dbg( Base64.encodeByteArray( b ) );

収量...

dGVzdHRlc3Q=

パイソン:

>>> T = 'testtest'
>>> print base64.b64encode( T )

収量

dGVzdHRlc3Q=

誰かがpythonまたはactionscriptのいずれかで同じIVを使用して同じ文字列を暗号化およびbase64エンコードして、実際にどのライブラリが正しい出力を生成しているかを知ることができますか?

4

1 に答える 1

0

問題はパディングにある可能性があります。JBossはパディングを使用しませんが、Pyは使用するパディングを表示しません。だから、それが理由かもしれません。actionscriptで別のパディング(たとえばPKCS#5)を試してください。

于 2011-01-12T20:22:59.530 に答える