2013-01-16 78 views
1

我想從M2Crypto一些現有的AES代碼轉換爲相當於pycrypto但文檔薄,尤其是對M2Crypto。我已將相關代碼縮減爲gist。主要問題是:移植AES碼pycrypto

  • Pycrypto要求輸入的長度爲16的倍數,m2crypto不需要。
  • 即使輸入長度是16的倍數,密文也不相同。經過對M2Crypto密碼參數的實驗後,結果發現將paddingkey_as_bytes設置爲false會使用pycrypto將其加密爲相同的密文。所以我需要在純python中模擬padding=Truekey_as_bytes=True

任何幫助將非常感激。

編輯:解決 - 要點已經具有同等M2Crypto/pycrypto代碼和測試更新,我會在那兒把它的情況下,有人發現了它在將來有用。

回答

2

您將必須實現PKCS#7填充/去填充,這是一種簡單,從RSA實驗室的公開可用的標準中規定的,當然在維基百科上的。還看到此答案:

AES 256 Encryption with PyCrypto using CBC mode - any weaknesses?

注意,PKCS#7填充和PKCS#5填充是相同的,儘管後者是正式僅8個字節塊密碼(例如DES/TDEA)。 OpenSSL默認使用PKCS#7填充。

+0

謝謝,這解決了填充問題!我更新了要點,並在將KEY_AS_BYTES更改爲false時驗證了密文匹配。現在需要弄清楚'key_as_bytes'的作用。 – gsakkis

+0

如果你不那麼幸運,它是一個錯誤的'EVP_BytesToKey'(3)。我說不吉利是因爲OpenSSL使用專有的密鑰派生函數,這可能意味着在Python中實現它。這是可行的,如果你測試的很好,它在安全性方面並不是真正的問題,但它確實需要一些加密理解。 –

+0

PS不要忘了,如果接受我的回答適合你的需要 –