1

我正在尝试使用PyCryptodome加密 PDF 文件并将系统的一些唯一 ID 作为关键参数。即 uuid 等。我想将AES 加密与 GCM 模式一起使用,因为 GCM 模式是一种Authentic Encryption,因为它返回一个用于身份验证的 MAC。我有以下烦恼:

  1. 我用谷歌搜索了很多,但找不到加密文件的代码。每个人都在加密字符串。
  2. 我想将 GCM 模式与 AES 一起使用,因此,需要一个使用 GCM 模式的示例。
  3. 在下面给出的示例中,加密后的代码将附加iv(初始化向量)与加密文本并在解密时使用它。所以我的问题是,我将如何在加密文件时完成此操作。
  4. 我不知道如何在解密文件时使用 MAC 真实性检查。

这就是我现在拥有的,不幸的是,它也在加密字符串:

import base64
import hashlib
from Cryptodome.Cipher import AES
from Cryptodome.Random import get_random_bytes

key = hashlib.sha256(b"uuid goes here").digest()

def encrypt(raw):
    BS = AES.block_size
    pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
    raw = base64.b64encode(pad(raw).encode('utf8'))
    iv = get_random_bytes(AES.block_size)
    cipher = AES.new(key= key, mode= AES.MODE_CFB,iv= iv)
    return base64.b64encode(iv + cipher.encrypt(raw))

def decrypt(enc):
    unpad = lambda s: s[:-ord(s[-1:])]
    enc = base64.b64decode(enc)
    iv = enc[:AES.block_size]
    cipher = AES.new(key, AES.MODE_CFB, iv)
    return unpad(base64.b64decode(cipher.decrypt(enc[AES.block_size:])).decode('utf8'))


e = encrypt('I am string, dont you want to use file?')
print(decrypt(e))
4

0 回答 0