【问题标题】:Bytes encoding in cryptography module giving error加密模块中的字节编码给出错误
【发布时间】: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


【解决方案1】:

在使用bytes 和`str() 之后,您应该使用print() 来查看变量中的内容

当你使用

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

然后你得到

 b'abc'

当你使用

 str(b'abc')

然后你得到

 "b'abc'"

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

您应该使用encode 创建bytesdecode 再次创建string

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

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2018-01-28
    • 2012-04-01
    • 2019-08-16
    • 1970-01-01
    相关资源
    最近更新 更多