2013-02-15 243 views
1

我正在研究一個數據密集型項目,我一直在使用PHP獲取數據並使用phpseclib對其進行加密。一大塊數據已經用AES和ECB模式加密 - 但密鑰長度只有10個。我能夠成功解密數據。密鑰長度問題:phpseclib上的AES加密和PyCrypto上的解密

但是,我需要在項目後期階段使用Python,因此需要使用它解密我的數據。我嘗試過使用PyCrypto,但它告訴我密鑰長度必須是16,24或32字節長,事實並非如此。根據phpseclib文檔,「鍵被填充到最接近的有效大小」,但我不知道如何在Python中實現它。簡單地用6個空格擴展字符串的長度不起作用。

我該怎麼辦?

+0

*根據phpseclib文檔「密鑰填充到最接近的有效大小」*>哇。 – 2013-02-15 10:18:48

+1

@Duncan Jones--聽起來像是在批評phpseclib?你會提出什麼樣的替代方案?如果您想使用PBKDF2,請使用setPassword()。 setKey()用於諸如phpseclib的SSH2實現之類的東西,並且不使用PBKDF2。密鑰是通過diffie-hellman密鑰交換得出的。如果您對通過派生的密鑰執行PBKDF2,那麼您的實現將不能與任何其他SSH實現互操作。至於null-padding與爲setKey()引發錯誤..該行爲與PHP的API tbh一致。靜默調整數據,而不是拋出錯誤。 – neubert 2013-06-21 02:52:15

+0

@neubert「*該行爲與PHP的API一致tbh *」>好吧,這樣做是有道理的。儘管如此,我擔心有多少PHP應用程序有一個小編碼錯誤,導致短/弱密鑰與沒有人一起使用更聰明! – 2013-06-21 07:43:55

回答

3

我強烈建議您調整您的PHP代碼以使用(至少)一個十六字節的密鑰,否則您的密碼系統會比其它方式弱得多。

我還建議您切換到CBC模式,因爲ECB模式可能會在您的輸入數據中顯示模式。確保每次使用密文時使用隨機IV。

最後,以解決您原來的問題:

按照phpseclib文檔中的「鍵是空填充到最接近的有效尺寸」,但我不知道如何實現在Python。簡單地用6個空格擴展字符串的長度不起作用。

空格字符0x20與空字符0x00不相同。

+1

這個答案有兩個迴應 - 如果有人能提出我犯了什麼錯誤,我會很感激嗎? – 2013-06-21 07:45:47