【发布时间】:2021-07-22 06:00:22
【问题描述】:
我使用 AES 方法加密从 txt 文件调用的句子。我使用了 GCM 模式并创建了一个特定的密钥。一切正常(代码如下)。
from Crypto.Cipher import AES
from Crypto.Protocol.KDF import scrypt
from Crypto.Util.number import long_to_bytes
number = 1
flag = open("sentance.txt", "rb").read()
key = scrypt(long_to_bytes(number), b"code", 32, N = 2 ** 10, r = 8, p = 1)
HexMyKey = key.hex()
cipher = AES.new(key, AES.MODE_GCM)
ciphertext, tag = cipher.encrypt_and_digest(flag)
enc = cipher.nonce + ciphertext + tag
HexEncryptedOriginalMessage = enc.hex()
我尝试实现解密过程,也就是说我只有密钥(HexMyKeyvalue)和加密消息(HexEncryptedOriginalMessage值),我想解密它。
但问题是我错过了一些东西..
我写了下面的代码,但我有那个错误消息。
TypeError:decrypt_and_verify() 缺少 1 个必需的位置 参数:'received_mac_tag
from Crypto.Cipher import AES
from Crypto.Protocol.KDF import scrypt
from Crypto.Util.number import long_to_bytes
key = bytes.fromhex(HexMykey)
data = bytes.fromhex(HexEncryptedOriginalMessage)
cipher = AES.new(key, AES.MODE_GCM)
dec = cipher.decrypt_and_verify(data)
你知道我如何解密那个加密的原始消息吗?
任何帮助将不胜感激!
【问题讨论】:
-
看起来您缺少
decrypt_and_verify函数的第二个参数mac_tag。 Docs -
在加密方面,您将 enc 值与“enc = cipher.nonce + ciphertext + tag”连接起来,因此对于解密,您需要执行反向 = 将数据(= 完整密文)拆分为 nonce、密文和gcmTag 并将它们提供给 cipher.decrypt
-
谢谢你们的回答。 @Michael 好的,我知道我必须拆分 enc 部分,但我不知道该怎么做。我尝试了 ciphertext, tag, nonce = data,但收到以下错误消息 ValueError: too many values to unpack (expected 3)。你有什么想法吗?
-
@kelalaka 我也检查了你的链接,也有拆分部分。但我没有设法在我的代码中实现它..
标签: python encryption cryptography aes aes-gcm