5

違いの原因が見つからないようです。このオンライン復号化ツールでこの違いを見つけました

http://www.tools4noobs.com/online_tools/decrypt/

PythonのPyCryptoモジュールを介して復号化しようとしている暗号化されたBlowfishデータがいくつかあります。ただし、問題は、データが「blowfish-compat」で暗号化されているように見えることです。これは、オンラインツールを使用してデータを復号化するために必要なものです。PyCryptoのモジュールを使用して復号化することはできません。また、厳密にBlowfish復号化を使用していることを収集しています(Blowfish-compatではありません)。

どういうわけかPythonを介してblowfish-compatを復号化することは可能ですか?両者の違いはわかりません。

4

1 に答える 1

7

良い質問。これは、mcrypt/libmcryptプログラムに固有のもののようです。

ドキュメントが見つからなかったので、libmcryptのソースを調べました。これには2つのモジュールが含まれています。1つはフグ用、もう1つはフグコンパット用です。それらを見ると、私が見ることができる唯一の違い(警告:私はソフトウェアエンジニアですが、暗号の専門家ではありません)は、バイト順序のロジックが交換されていることです( -ifdef WORDS_BIGENDIANに置き換えられていますifndef WORDS_BIGENDIAN-「n」に注意してください)。

したがって、私の推測では、リトルエンディアンのマシンでエンコードされたビッグエンディアンのマシンでデータをデコードするためのものであり、その逆も同様です。あるいは、コードがエンディアンについて従うべきいくつかの慣習があるかもしれませんが、いくつかのライブラリはそれを破り、これはそれを補います。

更新ああ!それを知っていると、「blowfish-compat big-endian」をグーグルで検索すると、確認のように見えます。http://www.spinics.net/lists/crypto/msg00175.htmlを参照してください。これは、順序が逆になった誤った実装について説明しています。

つまり、データが正しくエンコードされていませんでした。「compat」モードではバグが再現されるため、デコードできます。

それを考えると、mcryptへのPythonインターフェースが見つからない限り、Pythonの最前線では運が悪いように見えます。 http://labix.org/python-mcryptは機能するようです(pypiページ-http://pypi.python.org/pypi/python-mcrypt

(これは長い間提供する最も楽しい答えの1つでした:o)

ああ、ダウンロードボタンの下にある[すべてのファイルを参照]リンクをたどってhttp://sourceforge.net/projects/mcrypt/からソースを入手しました(ボタンはlibmcryptではなくmcryptをダウンロードします)。

于 2012-07-10T22:38:16.807 に答える