【发布时间】:2021-05-15 01:37:51
【问题描述】:
我正在使用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")))
但是,错误仍然存在。
【问题讨论】:
-
您是否使用
print()来查看变量中的内容?当您使用str()转换字节时,您可能应该看到前缀b- 这可能会产生问题。你应该使用string_data.encode('utf-8'),bytes_data.decode('utf-8')
标签: python string cryptography byte python-cryptography