首页 > 解决方案 > 解密函数只返回部分字符串而不是整个值

问题描述

我正在编写一个测试脚本,我用它来尝试解密我拥有密钥的加密字符串。但是,虽然代码有些运行,但它并没有打印我期望的完整字符串/值(并且知道结果)。

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

任何帮助将不胜感激。提前致谢。

标签: pythonpython-3.xcryptographypycrypto

解决方案


您没有在加密消息中包含 IV。您在解密期间使用第一个加密块作为 IV,因此在第一个块中加密的数据丢失。

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

enc = iv + cipher.encrypt(clear)

推荐阅读