Windows Python上的加密解密编码

Windows Python上的加密解密编码,python,python-3.x,encryption,character-encoding,pycryptodome,Python,Python 3.x,Encryption,Character Encoding,Pycryptodome,我正在尝试一个非常基本的用例来加密和解密示例字符串。下面是我的方法。我使用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_E

我正在尝试一个非常基本的用例来加密和解密示例字符串。下面是我的方法。我使用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)        
我无法重新生成原始字符串。我得到了如下乱七八糟的o/P。我在Windows10上尝试了不同的编码。但是没有人给我原始的字符串。我是不是遗漏了什么?我对python非常陌生。因此,如果我犯了错误,请务必让我知道

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

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

  • nonce是由AES对象随机创建的,在解密过程中需要某种方式来传输和使用nonce
  • 需要使用
    encrypt\u and\u digest
    decrypt\u and\u verify
    而不是只调用
    encrypt
    decrypt
    ,否则不会创建身份验证标签(如EAX等经过身份验证的操作模式)
  • 第一个问题生成随机数据,因为加密和解密期间的不同nonce将在解密后完全改变结果

    第二个问题将允许错误的密文通过而不验证身份验证标记,这将在解密期间生成错误而不是错误的明文消息

    你可以阅读更多关于这方面的内容



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

    请仅在版本特定的问题中使用标签;请务必将标签与它一起使用(如标签中所述)。请记住这一点。谢谢我将纠正你提到的两点。然而,编码解码仍然是一个问题,如果我给UTF-8它说,无效的开始字节或无效的继续字节错误。对不起,你得到的UTF-8错误之前或之后修复代码?因为在修复错误之前,您应该预料到这些错误。