Python 什么';河豚和河豚的区别是什么?

Python 什么';河豚和河豚的区别是什么?,python,encryption,mcrypt,blowfish,Python,Encryption,Mcrypt,Blowfish,我似乎找不到差异的来源。我在这个在线解密工具中发现了这种差异 我有一些加密的河豚数据,我正试图通过Python的PyCrypto模块解密这些数据。然而,问题是,数据似乎是用“河豚compat”加密的,因为这是通过在线工具解密数据所需要的;我无法通过PyCrypto的模块对其进行解密,我收集到它使用严格的河豚解密(而不是河豚compat,不管是什么) 有可能通过Python解密河豚compat吗?我不知道两者的区别。问得好。它似乎是特定于mcrypt/libmcrypt程序的 我找不到任何文档,

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

我有一些加密的河豚数据,我正试图通过Python的PyCrypto模块解密这些数据。然而,问题是,数据似乎是用“河豚compat”加密的,因为这是通过在线工具解密数据所需要的;我无法通过PyCrypto的模块对其进行解密,我收集到它使用严格的河豚解密(而不是河豚compat,不管是什么)


有可能通过Python解密河豚compat吗?我不知道两者的区别。

问得好。它似乎是特定于mcrypt/libmcrypt程序的

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

所以我的猜测是,它是用于解码在大端机器上编码的数据,而在小端机器上编码的数据,或者反之亦然。或者,代码应该遵循一些关于endianness的约定,但有些库打破了它,这就弥补了它的不足

更新啊哈!知道了这一点,谷歌搜索“河豚同胞big endian”看起来像是证实了这一点。请参阅-其中讨论了导致顺序颠倒的错误实现

简而言之,您的数据编码不正确。“compat”模式复制错误,以便对其进行解码

有鉴于此,除非您能找到一个到mcrypt的python接口,否则您在python方面似乎运气不佳。看起来它可能会工作(pypi页-)

(这是长期以来最有趣的答案之一:o)


哦,我通过“下载”按钮下的“浏览所有文件”链接(该按钮下载mcrypt,而不是libmcrypt)获得了源代码。

非常棒的东西,谢谢!我几乎放弃了希望,正准备用PHP重写,但你挽救了这一天!荣誉你的答案是正确的:然而,使用pycrypto的每个人都有一点希望:你可以通过在加密之前反转字节顺序(4个字节块)并再次在加密结果上“模拟”河豚compat。一个例子是,如果您使用的是CTR这样的模式,那么仿真代码就不能很好地工作。比如,如果你有1234,它返回4321,但是如果你有12呢?明文不需要是CTR中块大小的倍数。您可以将pad设置为最接近的8个字节,此后它将不起作用