密钥长度问题:phpseclib中的AES加密与PyCrypto中的解密

1 投票
1 回答
1078 浏览
提问于 2025-04-17 15:58

我正在做一个数据处理量很大的项目,使用PHP来获取数据,并用phpseclib进行加密。其中一部分数据是用AES加密的,使用的是ECB模式,不过密钥的长度只有10个字节。我成功地解密了这些数据。

但是,在项目的后期我需要用Python来处理数据,因此我需要用Python来解密我的数据。我尝试使用PyCrypto,但它告诉我密钥长度必须是16、24或32个字节,而我的密钥并不符合这个要求。根据phpseclib的文档,“密钥会被填充到最接近的有效大小”,但我不太确定在Python中该怎么实现。简单地用6个空格来扩展字符串的长度并不奏效。

我该怎么办呢?

1 个回答

3

我强烈建议你调整你的PHP代码,使用至少16个字节的密钥,否则你的加密系统会比它本来应该的要弱很多。

我还建议你切换到CBC模式,因为ECB模式可能会暴露你输入数据中的一些模式。确保每次加密时使用一个随机的初始化向量(IV),并把它和密文一起存储。

最后,针对你最初的问题:

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

空格字符0x20和空字符0x00是不同的。

撰写回答