问题描述
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 (将#修改为@)