Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Decrypt函数只返回部分字符串,而不是整个值_Python_Python 3.x_Cryptography_Pycrypto - Fatal编程技术网

Python Decrypt函数只返回部分字符串,而不是整个值

Python Decrypt函数只返回部分字符串,而不是整个值,python,python-3.x,cryptography,pycrypto,Python,Python 3.x,Cryptography,Pycrypto,我正在编写一个测试脚本,我正在使用它来尝试解密一个我有密钥的加密字符串。然而,虽然代码运行了一些,但它并没有打印我期望的完整字符串/值(并且知道结果) 例如,它不是返回thisisttingthatworks而是返回atWorks 代码如下: 导入base64 导入hashlib 从Crypto.Cipher导入AES 块大小=16 unpad=λs:s[0:-s[-1]] def解密(加密,密钥): private_key=hashlib.sha256(secret_key.encode('u

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

例如,它不是返回
thisisttingthatworks
而是返回
atWorks

代码如下:

导入base64
导入hashlib
从Crypto.Cipher导入AES
块大小=16
unpad=λs:s[0:-s[-1]]
def解密(加密,密钥):
private_key=hashlib.sha256(secret_key.encode('utf-8')).digest()
enc=base64.b64解码(enc)
iv=附件[:块大小]
密码=AES.new(私钥,AES.MODE\u CBC,iv)
返回unpad(cipher.decrypt(enc[BLOCK_SIZE:]))
解密=解密(邮件传递、密钥)
打印(字节。解码(解密))

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

您尚未将IV包含在加密邮件中。在解密过程中,您使用第一个加密块作为IV,因此在第一个块中加密的数据丢失

如果希望此解密例程正常工作,则必须在加密例程中连接IV和密码文本:

enc = iv + cipher.encrypt(clear)

你的密文有多长?你能发布加密码吗?SHA-256不是一个合适的密钥派生函数:CBC模式被认为是过时的。您应该使用AEAD模式:@mat关于密码文本的长度,可以从OP提供的信息中扣除。请参阅我的答案。一份加密代码的副本确实很有用!由于未定义
secret\u key
,因此提供的代码示例不会运行。
passw
secret\u key
应该是相同的吗?
secret\u key
是一个包含实际密钥的变量。我重新格式化了我的原始代码,以明确
passw
secret\u key
相同,以避免混淆
mail\u pass
是加密文本,而
secret\u key
是解密所需的密钥。感谢您的回复,Erwan。使用我的代码,您能否提供一个解释示例,以便我更好地理解您给出的方向?@MrY我添加了一个代码示例,但由于您没有提供加密例程,这可能与您的实际代码不匹配。@MrY另外,由于您显然对加密了解不够,我认为你不应该使用PyCryptodome或者更糟的,停止使用的PyCrypto。密码学很难。我建议您改用万无一失的pyNaCl: