gpt4 book ai didi

python - Windows Python 上的加密解密编码

转载 作者:行者123 更新时间:2023-12-01 09:34:16 25 4
gpt4 key购买 nike

我正在尝试一个非常基本的用例来加密和解密示例字符串。下面是我的方法。我正在使用 pycryptodome 进行加密。

@staticmethod
def encryptdecrypt(field):
if field is None:
return None
else:
print("Input Text is --> "+field)
cipher = AES.new(CryptHelper.secret_key,AES.MODE_EAX)
text = cipher.encrypt(field.encode('UTF-8'))
print("Encrypted String --> "+str(text))
cipher = AES.new(CryptHelper.secret_key,AES.MODE_EAX)
text = cipher.decrypt(text).decode('cp1252')
print("Decrypted String --> " +text)

我无法重新生成原始字符串。我得到如下的乱码。我尝试使用不同的编码,就像在 Windows 10 上一样。但没有一个给我原始字符串。我在这里错过了什么吗?我对 python 很陌生。因此,如果我犯了错误,请告诉我。

Input Text is --> Secret
Encrypted String --> b'^\xb4\xc7A\xbc\x05'
Decrypted String --> >F8Ò³…

最佳答案

问题中的代码有两个问题:

  1. nonce是由AES对象随机创建的,在解密过程中需要有某种方式来传输和使用nonce;
  2. 需要使用 encrypt_and_digestdecrypt_and_verify 而不是仅调用 encryptdecrypt,否则不会创建身份验证标记(正如您对 EAX 等经过身份验证的操作模式所期望的那样)。

第一个问题生成随机数据,因为加密和解密过程中不同的随机数会完全改变解密后的结果。

第二个问题会在没有验证身份验证标签的情况下让错误的密文通过,这会在解密过程中生成错误而不是错误的明文消息。

您可以阅读有关此的更多信息 here (cryptodome documentation on authenticated ciphers .

<小时/>

当然,字符编码与此无关。您应该在加密和解密上使用相同的字符编码。通常首选 UTF-8。

关于python - Windows Python 上的加密解密编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49667486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com