2013-02-15 208 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