Как зашифровать PDF в python, используя pycryptodome - PullRequest
1 голос
/ 01 марта 2020

Я пытаюсь зашифровать PDF-файл, используя PyCryptodome , и в качестве ключевого параметра указываю уникальный идентификатор системы. то есть uuid et c. Я хочу использовать AES Encryption вместе с режимом GCM, потому что режим GCM - это Authenti c Encryption , поскольку он возвращает MA C, который используется для аутентификации. У меня следующие проблемы:

  1. Я много гуглил, но не могу найти код, который шифрует файл. Все шифруют строки.
  2. Я хочу использовать режим GCM с AES, поэтому мне нужен пример, который использует режим GCM.
  3. В приведенном ниже примере после добавления кода шифрования iv (Вектор инициализации) с зашифрованным текстом и его использованием при расшифровке. Поэтому мой вопрос заключается в том, как мне выполнить sh при шифровании файлов.
  4. Я не знаю, как использовать проверку подлинности MA C при расшифровке файла.

Это то, что у меня сейчас есть, К сожалению, это также строка шифрования:

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))
...