python - 解密函数只返回部分字符串而不是整个值
问题描述
我正在编写一个测试脚本,我用它来尝试解密我拥有密钥的加密字符串。但是,虽然代码有些运行,但它并没有打印我期望的完整字符串/值(并且知道结果)。
例如,不是返回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))
任何帮助将不胜感激。提前致谢。
解决方案
您没有在加密消息中包含 IV。您在解密期间使用第一个加密块作为 IV,因此在第一个块中加密的数据丢失。
如果您希望此解密例程起作用,则必须在加密例程中连接 IV 和密文:
enc = iv + cipher.encrypt(clear)
推荐阅读
- reactjs - React 测试:测试组件渲染子组件
- pentaho - Pentaho PDI MonetDB 批量加载程序步骤中的“加载数据时出错:42000”
- python-3.x - TypeError:'int' 对象不可下标。现在我该怎么办?
- react-native - 提交数据后文本输入无法使用
- python - Python 异步 Azure Blob 上传
- r - 如何扩大y轴刻度
- python - 使用较大样本的 NumPy 随机抽样比较小样本产生的唯一元素更少
- angular - 如何设置自定义离子选择和离子选择选项的数字输入限制
- aws-glue - AWS Glue 2.0,本地pyspark开发,测试混乱
- google-cloud-platform - 如何从 Apache Beam(谷歌云数据流)中的列字符串中删除特殊字符,包括逗号、引号