Blowfish和Blowfish-compat有什么区别?

5
我似乎找不到这些差异的来源。我在这个在线解密工具中发现了这个不同之处:http://www.tools4noobs.com/online_tools/decrypt/ 我有一些加密的Blowfish数据,正在尝试通过Python的PyCrypto模块进行解密。然而,问题是,数据似乎是用"blowfish-compat"加密的,因为只有这个工具才能解密它;我无法通过PyCrypto模块解密它,并且我认为它仅使用Blowfish解密(而不是Blowfish-compat,不知道是什么)。
是否有可能通过Python解密blowfish-compat?我不知道两者之间的差异。
1个回答

7
很好的问题。它似乎是与mcrypt/libmcrypt程序相关的特定问题。
我找不到任何文档,所以查看了libmcrypt源代码。其中包含两个模块,一个用于blowfish,另一个用于blowfish-compat。当我查看它们时,唯一能看到的区别(注意:我是软件工程师,但不是加密专家)就是字节顺序逻辑被交换了(ifdef WORDS_BIGENDIAN被替换为ifndef WORDS_BIGENDIAN - 注意“n”)。
因此,我猜想它是为在大端机器上解码在小端机器上编码的数据,或者反之亦然。或者也许有某些约定需要遵循字节顺序,但某些库会打破它,这可以弥补。
更新:啊哈!如果知道了这一点,那么在google中搜索“blowfish-compat big-endian”就可以找到看起来像确认的结果。请参见http://www.spinics.net/lists/crypto/msg00175.html - 其中讨论了错误的实现,导致顺序相反。
因此,简而言之,您的数据被错误地编码了。 “compat”模式复制了该bug以便可以解码。
鉴于此,除非您找到mcrypt的python接口,否则在python方面可能会出现问题。http://labix.org/python-mcrypt看起来可以使用(pypi页面-http://pypi.python.org/pypi/python-mcrypt)。
(这是我很长时间以来提供的最有趣的答案之一:o)
哦,我从http://sourceforge.net/projects/mcrypt/获取了源代码,通过下载按钮下面的“浏览所有文件”链接(该按钮下载mcrypt而不是libmcrypt)。

太棒了,谢谢!我差点就要放弃了,打算改用PHP重写,但是你拯救了这一天!赞! - Coldblackice
3
你的答案非常准确:然而,对于使用pycrypto的每个人来说仍有一丝希望:你可以在加密之前将字节顺序(4字节块)翻转,再在加密结果上进行相同的操作,以“模拟”blowfish-compat。一个例子是这个提交 https://github.com/pyropeter/otrtool/commit/4282fbee1643ed2b37ae48c510619b2617a34bf1。 - Felix Schwarz
那个仿真代码在使用CTR模式时效果不太好。比如你有 1234 它会返回 4321,但如果你只有 12 呢?CTR模式下明文不需要是块大小的倍数。你可以用 NULL 填充到最近的8字节,但超出这个范围就不行了。 - neubert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接