我正在尝试一个非常基本的用例来加密和解密一个示例字符串。下面是我的方法。我用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)
我无法重新生成原始字符串。我得到了像下面这样的胡言乱语。我尝试了不同的编码方式,就像在Windows10上一样。但没有人给我原始的绳子。我是不是少了点什么?我对python很陌生。所以如果我犯了一个错误,请告诉我。在
^{pr2}$
问题中的代码有两个问题:
encrypt_and_digest
和decrypt_and_verify
,而不是仅仅调用encrypt
和decrypt
,否则不会创建身份验证标记(正如您对EAX等经过身份验证的操作模式所期望的那样)。在第一个问题生成随机数据,因为在加密和解密过程中不同的nonce将完全改变解密后的结果。在
第二个问题会让错误的密文在没有验证身份验证标签的情况下通过,这将在解密过程中生成错误而不是错误的明文消息。在
你可以阅读更多关于这个here (cryptodome documentation on authenticated ciphers。在
当然,字符编码与此无关。加密和解密时应使用相同的字符编码。通常首选UTF-8。在
相关问题 更多 >
编程相关推荐