Blowfish和Blowfish-compat有什么区别?

Col*_*ice 5 python encryption blowfish mcrypt

我似乎无法找到差异的来源.我在这个在线解密工具中发现了这种差异

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

我有一些加密的Blowfish数据,我试图通过Python的PyCrypto模块解密.然而,问题是数据似乎是用"blowfish-compat"加密的,因为这是通过在线工具解密它所需要的; 我不能通过PyCrypto的模块解密它,我收集它严格使用Blowfish解密(而不是Blowfish-compat,不管是什么).

有可能以某种方式通过Python解密blowfish-compat吗?我不知道两者之间的区别.

and*_*oke 7

好问题.它似乎是mcrypt/libmcrypt程序特有的东西.

我找不到任何文档,所以我查看了libmcrypt的源代码.它包含两个模块,一个用于河豚,一个用于河豚比赛.当我看到这些时,我能看到的唯一区别(警告:我是软件工程师,但不是加密专家)是字节顺序的逻辑被交换(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 page - http://pypi.python.org/pypi/python-mcrypt).

(这是很长一段时间内提供的最有趣的答案之一:o)

哦,我从http://sourceforge.net/projects/mcrypt/获得了源代码,按照下载按钮下的"浏览所有文件"链接(按钮下载mcrypt,而不是libmcrypt).

  • 你的回答是:但是每个人都使用pycrypto有一点希望:你可以通过在加密之前反转字节顺序(4字节块)并再次加密结果来"模拟"blowfish-compat.一个例子是这个提交https://github.com/pyropeter/otrtool/commit/4282fbee1643ed2b37ae48c510619b2617a34bf1 (3认同)