嗨,我正在编写一个关于Shamir秘密共享的基本项目,但我在解密文件时遇到了一个问题。 我用AES加密和解密
我要加密的代码:
def encrypt_text(self, text):
pad_text = pad(text, AES.block_size)
iv = Random.new().read(AES.block_size)
password = self.alphanumric_pass(self.key)
cipher = AES.new(password, AES.MODE_CBC, iv)
return iv + cipher.encrypt(pad_text)
def encrypt_file(self):
try:
with open(self.file, 'rb') as f:
orig_file = f.read()
enc_text = self.encrypt_text(orig_file)
except:
print("The file: " + str(self.file) + " does not exist")
sys.exit(1)
return enc_text
def save_encrypted_file(self, out_name):
with open(self.file + ".aes", 'wb') as f:
f.write(self.encrypt_file())
def alphanumric_pass(self, key):
num = str(key)
return hashlib.sha256(num.encode('utf8')).digest()
我要解密的代码:
def decrypt_text(self, text, key):
iv = text[:AES.block_size]
password = self.alphanumric_pass(key)
cipher = AES.new(password, AES.MODE_CBC, iv)
decrypted_text = unpad(cipher.decrypt(text[AES.block_size:]), AES.block_size)
return decrypted_text
def decipher_file(self):
try:
with open(self.file, 'rb') as f:
encrypted_file = f.read()
except:
print("There was an error while reading " + str(self.file))
secret = self.get_secret()
num = str(secret)
key = hashlib.sha256(num.encode('utf-8')).digest()
decrypted_text = self.decrypt_text(encrypted_file, key)
return decrypted_text
def get_secret(self):
return LagrangeInterpolation.reconstruct_secret(self.shares, 0)
def save_decrypted_file(self, new_name):
with open(new_name, 'wb') as f:
f.write(self.decipher_file())
但是,当我试图解密文件时,会出现以下错误:
File "/home/david/Documentos/Modelado_Y_Programacion/Shamir-Secret-Share-Scheme/s4/Decrypter.py", line 38, in decrypt_text
decrypted_text = unpad(cipher.decrypt(text[AES.block_size:]), AES.block_size)
File "/home/david/.local/lib/python3.7/site-packages/Crypto/Cipher/_mode_cbc.py", line 246, in decrypt
raise ValueError("Data must be padded to %d byte boundary in CBC mode" % self.block_size)
ValueError: Data must be padded to 16 byte boundary in CBC mode
有人能帮助修复这个错误吗?我花了好几个小时寻找如何修复它,但什么也找不到
目前没有回答
相关问题 更多 >
编程相关推荐