Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
密钥长度问题:phpseclib上的AES加密和PyCrypto上的解密_Php_Python_Aes_Pycrypto_Phpseclib - Fatal编程技术网

密钥长度问题:phpseclib上的AES加密和PyCrypto上的解密

密钥长度问题:phpseclib上的AES加密和PyCrypto上的解密,php,python,aes,pycrypto,phpseclib,Php,Python,Aes,Pycrypto,Phpseclib,我正在从事一个数据密集型项目,我一直在使用PHP获取数据,并使用phpseclib对其进行加密。数据块已在AES中使用ECB模式进行加密,但密钥长度仅为10。我能够成功地解密数据 但是,我需要在项目的后期阶段使用Python,因此需要使用它解密数据。我尝试使用PyCrypto,但它告诉我密钥长度必须是16、24或32字节,事实并非如此。根据phpseclib文档,“密钥被空填充到最接近的有效大小”,但我不确定如何在Python中实现这一点。简单地用6个空格扩展字符串的长度是行不通的 我该怎么办?

我正在从事一个数据密集型项目,我一直在使用PHP获取数据,并使用phpseclib对其进行加密。数据块已在AES中使用ECB模式进行加密,但密钥长度仅为10。我能够成功地解密数据

但是,我需要在项目的后期阶段使用Python,因此需要使用它解密数据。我尝试使用PyCrypto,但它告诉我密钥长度必须是16、24或32字节,事实并非如此。根据phpseclib文档,“密钥被空填充到最接近的有效大小”,但我不确定如何在Python中实现这一点。简单地用6个空格扩展字符串的长度是行不通的


我该怎么办?

我强烈建议您将PHP代码调整为使用(至少)16字节的密钥,否则您的加密系统可能会比其他方式弱很多

我还建议您切换到CBC模式,因为ECB模式可能会显示您输入数据中的模式。确保每次加密并使用密文存储时都使用随机IV

最后,要回答您最初的问题:

根据phpseclib文档,“密钥被空填充到最接近的有效大小”,但我不确定如何在Python中实现这一点。简单地用6个空格扩展字符串的长度是行不通的


空格字符
0x20
与空字符
0x00

不同,根据phpseclib文档,“键被空填充到最接近的有效大小”>哇。@Duncan Jones-听起来你在批评phpseclib?你会提出什么替代方案?如果要使用PBKDF2,请使用setPassword()。setKey()用于phpseclib的SSH2实现,而不使用PBKDF2。密钥是通过diffie-hellman密钥交换导出的。如果对通过该方法派生的密钥执行PBKDF2,那么您的实现将无法与任何其他SSH实现互操作。至于空填充与为setKey()抛出错误。。这种行为与PHP的API tbh一致。静默地调整数据,而不是抛出错误。@neubert“这种行为与PHP的API tbh一致”>好的,这是有道理的。尽管如此,我还是担心有多少PHP应用程序存在一个小的编码错误,导致使用短/弱键时没有人会更聪明!phpseclib的作者已经插嘴了这一点:基本上,据他说,phpseclib的做事方式不仅符合neubert所说的PHP,而且也符合其他加密lib,如mcrypt和OpenSSL。对这个答案投了两张反对票——如果有人能指出我犯了什么错误,我将不胜感激?