Python中文件加密的AESGCM

2024-04-27 03:42:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在python中使用AES-GCM加密进行文件加密。我使用的是Cryptodome包,我知道如何在基于this example的单个纯文本字符串上使用encrypt_and_digest和{}来执行加密/解密。 现在,我正在尝试加密和解密一个文本文件。它包含多个AES块,我想在解密过程开始时检查身份验证标记,以验证文件的完整性。我不知道如何为整个文件生成一个身份验证标记,并在目的地进行验证。目前,我有以下代码:

加密

def encrypt(self, filename):
    iv = get_random_bytes(16)
    cipher = AES.new(self.K4, AES.MODE_GCM, iv)
    try:
        with open(filename, 'rb') as src:
            with open(filename + ".enc", 'wb') as des:
                des.write(iv)
                for block in iter(lambda: src.read(AES.block_size * 128), b''):
                    if len(block) == AES.block_size * 128:
                        des.write(cipher.encrypt(block))

                    # Padding the last block
                    else:
                        remain = len(block) % 16
                        if remain == 0:
                            remain = 16
                        block += utility.to_bytes((chr(remain) * remain))
                        des.write(cipher.encrypt(block))
    except (IOError, OSError):
        raise IOError("Cannot open the file to encrypt")

解密

^{pr2}$

正如您可以清楚地看到的,没有执行身份验证。有什么想法吗?在


Tags: 文件标记self身份验证openfilenameblockwrite