2011-08-11 25 views
5

Rubyを使用してテキストを暗号化する必要があります。私はその目的のためにRuby-Openssl gemを使用しました。この暗号化されたテキストは、私がそれを解読する必要があるpythonプログラムに渡されます。私は目的のためにPycryptoを使用しました。Ruby-OpenSSL、PyCrypto間のAES暗号化/復号化

問題は、Pycryptoではパディング規則を手動で指定する必要があることです。 Rubyでは、パディングは自動的に行われます。私はAES-CBCブロック暗号モードを使用しています。このパディングは、Pythonでのストリッピングが正しく実行されないため、問題を引き起こします。例として、これらはRubyやPythonの両方で暗号化されたテキストのbase64でエンコードされている:

Python: aENJY28lvE89yY2T/te8vWwdeoeSqSwwlrOAv7b3AWw= 
Ruby: aENJY28lvE89yY2T/te8vVoQE6JNxdSRgYXC8mqF3nI= 

助けてください...

答えて

3

OpenSSLでは、デフォルトでPKCS#5Paddingが適用されるため、AES-CBCモードでOpenSSL::Cipherのデータを暗号化するときにも自動的に使用されます(OpenSSL docs参照)。したがって、Rubyを使用しているときに手作業によるパディングを実行する必要はありません。

PyCryptoを使用している場合、埋め込みはPythonでmanuallyを実行する必要があります。

このパディングスキームをPythonで適用すると、暗号化された両方のBase64文字列が一致する必要があります。

+0

私はM2Cryptoを使用しようとしました。残念ながら、リンクで提供されているプログラムでは動作しないようです。私はPKCS#5パディングを適用しようとします。 – vishy1618

+0

これは、パディングロジックを使用して動作します、ありがとう! – vishy1618

+0

ニース - あなたを大歓迎です! – emboss

0

あなたの両方で使用する正しいパディングモードを指定する必要が表示されますケース - パディングは暗号ストリームの基本的な特性であり、受信側と送信側の両方で一致する必要があります。

+0

パディングはPyCryptoで手動で操作できます。つまり、パディングを行うロジックを指定しています。一方、Rubyではパディングは自動的に行われ、Pythonのロジックを複製する以外の方法はありません。 – vishy1618

+0

Rubyで自動的に行われる処理をPythonで行うか、または両方で手動で行う必要があります。 – agf

+0

私はRubyで手作業で行う方法を考え出していません。 Ruby-Opensslでパディングがどのように行われているのか分からない限り、Pythonプログラムを修正することになります。 – vishy1618