AlreadyFinalized("上下文已经完成")

问题描述

from cryptography.hazmat.primitives.ciphers import Cipher,algorithms,modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
import os

class EncryptionManager:
    def __init__(self):
        key = os.urandom(32)
        iv = os.urandom(16)
        aesContext = Cipher(algorithms.AES(key),modes.CBC(iv),backend=default_backend())
        self.encryptor = aesContext.encryptor()
        self.decryptor = aesContext.decryptor()
        self.padder = padding.PKCS7(128).padder()
        self.unpadder = padding.PKCS7(128).unpadder()

    def update_encryptor(self,plaintext):
        return self.encryptor.update(self.padder.update(plaintext))

    def finalize_encryptor(self):
        return self.encryptor.update(self.padder.finalize()) + self.encryptor.finalize()

    def update_decryptor(self,ciphertext):
        return self.unpadder.update(self.decryptor.update(ciphertext))

    def finalize_decryptor(self):
        return self.unpadder.update(self.decryptor.finalize()) + self.unpadder.finalize()
 
# Auto generate key/IV for encryption
manager = EncryptionManager()

plaintexts = [
b"SHORT",b"MEDIUM MEDIUM MEDIUM",b"LONG LONG LONG LONG LONG LONG"
]

ciphertexts = []

for m in plaintexts:
    ciphertexts.append(manager.update_encryptor(m))
    ciphertexts.append(manager.finalize_encryptor())

for c in ciphertexts:
    print("Recovered",manager.update_decryptor(c))
    print("Recovered",manager.finalize_decryptor())

而且总是引发这个异常:

raise AlreadyFinalized("上下文已经完成。") cryptography.exceptions.AlreadyFinalized:上下文已经完成。

当“纯文本”列表中的第二项中的 for 循环时引发此错误

for m in plaintexts:
    ciphertexts.append(manager.update_encryptor(m)) # If m == plaintexts[1] the exception raise here
    ciphertexts.append(manager.finalize_encryptor())

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)