好问题。它似乎是 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 页面 - http://pypi.python.org/pypi/python-mcrypt)。
(这是长期以来提供的最有趣的答案之一:o)
哦,我通过点击下载按钮下的“浏览所有文件”链接从http://sourceforge.net/projects/mcrypt/获得了源代码(该按钮下载的是 mcrypt,而不是 libmcrypt)。