我正在尝试使用PyCryptodome加密 PDF 文件并将系统的一些唯一 ID 作为关键参数。即 uuid 等。我想将AES 加密与 GCM 模式一起使用,因为 GCM 模式是一种Authentic Encryption,因为它返回一个用于身份验证的 MAC。我有以下烦恼:
- 我用谷歌搜索了很多,但找不到加密文件的代码。每个人都在加密字符串。
- 我想将 GCM 模式与 AES 一起使用,因此,需要一个使用 GCM 模式的示例。
- 在下面给出的示例中,加密后的代码将附加
iv
(初始化向量)与加密文本并在解密时使用它。所以我的问题是,我将如何在加密文件时完成此操作。 - 我不知道如何在解密文件时使用 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))