微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。