0

対称暗号化を使用して、actionscript 3(クライアント)からPython(サーバー)にデータを渡そうとしています。Base64でエンコードされた出力がas3cryptoおよびpycrypto暗号化ライブラリと異なります

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

ActionScript 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ライブラリから同じキー、初期化ベクトル、およびアルゴリズムを使用して、私に異なる出力を提供します。

のPython:

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 =

私はbase64では、両方のライブラリに 'TESTTEST' をエンコードすることができるので、私は、暗号化処理と間違って何かをやっていることをかなり確信しています同じ出力を受信します。

のActionScript 3:

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

利回り...

dGVzdHRlc3Q =

のPython:

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

利回り

dGVzdHRlc3Q =

は、誰かが暗号化とbase64encode同じ文字列をPythonやActionScriptのいずれかで同じIVで、私は実際に正しい出力を生成しているライブラリを知っていただけますか?

+0

各ライブラリを使用して暗号化された各値を復号化するとどうなりますか? –

答えて

0

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

+0

Pycryptoメーリングリストで解決できました。 as3の初期化ベクトルが異なる方法で解析されていました。 –

関連する問題