Python AES加密.除一个字符外,每个文件的前16个字符将替换为编码字节



我尝试执行此任务的基础如下。

对于给定的目录(在本例中,我使用的是"/payground"(,使用AES加密来加密所有.txt文件。然后,可以通过运行两个独立的python脚本来解密这些文件(一个用于创建所需格式的密钥,另一个用于解密(。

我面临的问题是,当我有一个文件时,它似乎可以对其进行加密和解密。然而,当我有多个文件时,除了一个文件外,每个文件的前16个字节都已损坏。我相信这可能是文件填充和IV的问题,但我对此非常陌生,无法解决。目录和文件的结构如下所示。

|
|-- encrypt.py
|-- recover_key.py
|-- decrypt.py
|-- pem_private_key.pem
|-- playground
| |-- file1.txt
| |-- file2.txt
| |-- file3.txt
|

实际情况是,您使用相同的密码对象来加密不同的文件。你不应该那样做;您应该为每个加密创建一个新的密码对象,并创建一个全新的IV。对于CBC模式,IV通常以密文为前缀。

在CBC中,前一个密文块被用作"向量"来加密下一个块。如果您继续使用相同的密码进行加密,则文件起始块的明文将与前一个文件的密文进行异或:最后一个文件中的最后一个密文块充当IV。如果您没有按照完全相同的顺序解密,则解密第一个16字节的块将失败。当然,你需要确保文件的解密不依赖于任何其他文件——调整解密顺序不是一个好的解决方案。

最新更新