密码模块中的字节编码给出错误
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')
我正在使用 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')