我正在编写一个测试脚本,该脚本用于尝试解密我拥有密钥的加密字符串。但是,尽管代码在某种程度上可以运行,但它并没有打印出我期望的完整字符串/值(并知道结果)。
例如,不是返回ThisIsTheStringThatWorks
,而是返回atWorks
代码如下:
import base64
import hashlib
from Crypto.Cipher import AES
BLOCK_SIZE = 16
unpad = lambda s : s[0:-s[-1]]
def decrypt(enc, secret_key):
private_key = hashlib.sha256(secret_key.encode('utf-8')).digest()
enc = base64.b64decode(enc)
iv = enc[:BLOCK_SIZE]
cipher = AES.new(private_key, AES.MODE_CBC, iv)
return unpad(cipher.decrypt(enc[BLOCK_SIZE:]))
decrypted = decrypt(mail_pass, secret_key)
print(bytes.decode(decrypted))
任何帮助将不胜感激。预先感谢。
答案 0 :(得分:0)
您没有在加密消息中包含IV。您在解密过程中将第一个加密块用作IV,因此,第一个块中加密的数据会丢失。
如果希望此解密例程起作用,则必须在加密例程中连接IV和密文:
enc = iv + cipher.encrypt(clear)