Windows Python上的加密-解密编码

2024-09-27 07:20:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试一个非常基本的用例来加密和解密一个示例字符串。下面是我的方法。我用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}$

Tags: key字符串textnonefieldnewsecretstring
1条回答
网友
1楼 · 发布于 2024-09-27 07:20:51

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

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

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

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

你可以阅读更多关于这个here (cryptodome documentation on authenticated ciphers。在


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

相关问题 更多 >

    热门问题