31 lines
1.2 KiB
Python
31 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
import base64
|
|
from urllib.parse import quote_plus, unquote_plus
|
|
|
|
from cryptography.hazmat.decrepit.ciphers.algorithms import Blowfish
|
|
from cryptography.hazmat.primitives.ciphers import Cipher, modes
|
|
from cryptography.hazmat.primitives.padding import PKCS7
|
|
|
|
_SECURE_PDF_KEY = b"T1mC0nT4"
|
|
|
|
|
|
def encrypt_secure_pdf_value(value: str) -> str:
|
|
plaintext = str(value).encode("utf-8")
|
|
padder = PKCS7(Blowfish.block_size).padder()
|
|
padded = padder.update(plaintext) + padder.finalize()
|
|
encryptor = Cipher(Blowfish(_SECURE_PDF_KEY), modes.ECB()).encryptor()
|
|
ciphertext = encryptor.update(padded) + encryptor.finalize()
|
|
encoded = base64.b64encode(ciphertext).decode("ascii")
|
|
return quote_plus(encoded, safe="")
|
|
|
|
|
|
def decrypt_secure_pdf_value(value: str) -> str:
|
|
encoded = unquote_plus(str(value))
|
|
ciphertext = base64.b64decode(encoded, validate=True)
|
|
decryptor = Cipher(Blowfish(_SECURE_PDF_KEY), modes.ECB()).decryptor()
|
|
padded = decryptor.update(ciphertext) + decryptor.finalize()
|
|
unpadder = PKCS7(Blowfish.block_size).unpadder()
|
|
plaintext = unpadder.update(padded) + unpadder.finalize()
|
|
return plaintext.decode("utf-8")
|