密码模块中的字节编码给出错误

Bytes encoding in cryptography module giving error

我正在使用 cryptography 模块的 Fernet 进行编码。
Fernet 技术使用密钥将数据转换为字节,然后我们可以使用相同的密钥将字节转换回字符串。
我想将编码字节转换为字符串并存储该字符串。 (把它转换成字符串对我来说很重要)。

所以,我采用了以下方式:

f = Fernet(key)
mystr = str(f.encrypt(bytes(mystr, "utf-8")))        # convert mystr to bytes

但是现在,当我尝试将字符串转换回字节时,我无法再次解密它。

mystr = str(f.decrypt(bytes(mystr, "utf-8")))        # convert mystr back to a string

我收到以下错误:

  File "C:\Users\Me\Desktop\Python\Encode.py", line 155, in encode
    data = str(f.decrypt(bytes(data, "utf-8")))
  File "C:\Users\Me\AppData\Local\Programs\Python\Python39\lib\site-packages\cryptography\fernet.py", line 75, in decrypt
    timestamp, data = Fernet._get_unverified_token_data(token)
  File "C:\Users\Me\AppData\Local\Programs\Python\Python39\lib\site-packages\cryptography\fernet.py", line 107, in _get_unverified_token_data
    raise InvalidToken
cryptography.fernet.InvalidToken

我尝试像这样解密:

mystr = str(f.decrypt(bytes(mystr, "ascii")))

mystr = str(f.decrypt(bytes(mystr, "base64")))

但是,错误仍然存​​在。

在使用 bytes 和 `str()

之后,您应该使用 print() 查看变量中的内容

当你使用

 bytes('abc', 'utf-8')

然后你得到

 b'abc'

当你使用

 str(b'abc')

然后你得到

 "b'abc'"

而不是 'abc' - 这个前缀 b' ' 改变了一切。现在你有 6 个字符而不是 3 个字符的字符串。

您应该使用 encode 创建 bytes 并使用 decode 再次创建 string

  'abc'.encode('utf-8').decode('utf-8')