解密函数仅返回部分字符串,而不返回整个值

时间:2019-09-11 21:15:57

标签: python python-3.x cryptography pycrypto

我正在编写一个测试脚本,该脚本用于尝试解密我拥有密钥的加密字符串。但是,尽管代码在某种程度上可以运行,但它并没有打印出我期望的完整字符串/值(并知道结果)。

例如,不是返回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))

任何帮助将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:0)

您没有在加密消息中包含IV。您在解密过程中将第一个加密块用作IV,因此,第一个块中加密的数据会丢失。

如果希望此解密例程起作用,则必须在加密例程中连接IV和密文:

enc = iv + cipher.encrypt(clear)
相关问题