2012-07-10 32 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