2012-07-10 76 views
3

我似乎无法找到差异的来源。我发现在这个网上解密工具Blowfish和Blowfish-compat有什么区别?

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

我有我试图通过Python的PyCrypto模块来解密加密一些数据河豚这种差异。然而,问题在于数据似乎被“blowfish-compat”加密,因为这是通过在线工具解密的数据;我无法通过PyCrypto的模块对其进行解密,并且我正在收集它严格使用Blowfish解密(而不是Blowfish-compat,无论如何)。

是否有可能通过Python以某种方式解密blowfish-compat?我不知道两者的区别。

回答

5

很好的问题。它似乎是特定于mcrypt/libmcrypt程序的东西。

我找不到任何文档,所以我查看了libmcrypt的源代码。包含两个模块,一个用于河豚,另一个用于blowfish-compat。当我看到这些时,我可以看到的唯一区别(警告:我是软件工程师,但不是加密专家)是字节顺序的逻辑交换(ifdef WORDS_BIGENDIAN被替换为ifndef WORDS_BIGENDIAN - 注意“n”)。

所以我的猜测是,它是解码在小端机器上编码的大端机器上的数据,反之亦然。或者也许代码应该遵循关于字节顺序的一些约定,但是一些库破坏它,并且这补偿了。

更新 aha!并知道,谷歌搜索“blowfish-compat big-endian”看起来像确认。请参阅http://www.spinics.net/lists/crypto/msg00175.html - 其中讨论了颠倒顺序的错误实现。

因此,简而言之,您的数据被错误地编码。 “compat”模式再现错误,以便它们可以被解码。

考虑到,它看起来像你在Python前面运气不好,除非你可以找到一个python接口mcrypt。 http://labix.org/python-mcrypt看起来像它可能工作(pypi页 - http://pypi.python.org/pypi/python-mcrypt)。

(这是最有趣的答案,在相当长的时间内提供的一个:O)

哦,我按照“浏览所有文件”下载按钮下的链接得到了http://sourceforge.net/projects/mcrypt/的源(按钮下载mcrypt,而不是libmcrypt)。

+0

太棒了,谢谢!我几乎已经放弃了希望,正准备用PHP重写,但是你已经保存了一天!奖励! – Coldblackice 2012-07-10 22:45:41

+3

你的答案是现货:但是对于每个使用pycrypto的人都有一点希望:你可以通过在加密之前颠倒字节顺序(4字节块)并再次加密加密结果来“模拟”blowfish-compat。一个例子是这个提交https://github.com/pyropeter/otrtool/commit/4282fbee1643ed2b37ae48c510619b2617a34bf1 – 2014-02-04 13:30:50

+0

如果你使用像CTR这样的模式,那么仿真代码就不能很好地工作。就像如果你有1234,它返回4321,但如果你有12?明文不需要是CTR中块大小的倍数。你可以将NULL填充到最接近的8个字节,然后再不行 – neubert 2016-07-05 23:48:01