我目前正试图用Python对一个更大的文件执行AES加密,以便进行模拟。目前,我一直在尝试使用AES.MODE_EAX,如AES文档中提到的那样:
https://pycryptodome.readthedocs.io/en/latest/src/cipher/aes.html
我想检查文件加密的正确方法是什么。
目前,我正在将文件分成16字节块,并使用相同的128位密钥来创建密码,以便对每个块进行加密。根据加密的需要,我在每个块上运行以下命令,并对加密结果执行分析:
cipher = AES.new(key, AES.MODE_EAX)
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data_chunk)我不确定我的理解是否彻底。这是否是通过AES加密数据的有效方法?或者使用MODE_EAX还有其他模式或方法(比如使用完整文件的数据)?在这种情况下我应该考虑的?
发布于 2021-09-28 06:50:16
您不必将数据划分为16字节块,并对每个块进行单独加密。encrypt_and_digest方法将为您处理所有这些部门。相反,您应该对整个数据数组调用该方法。
通过对每个块进行单独加密,您将为每个块创建一个名和标记,而不是为所有数据创建一个名和标记。即使是中等大小的数据,这也将大约是密码的三倍。每个块产生一个标记的唯一真正好处是,如果消息的完整性受到损害,您可以缩小它发生在哪个块中的更改范围。
正如注释中所指出的,在现代实现中,AES.GCM通常比AES.EAX更可取。
https://crypto.stackexchange.com/questions/95320
复制相似问题