在Python中编码元组或字典?

时间:2018-06-03 12:27:27

标签: python python-3.x dictionary tuples byte

我使用加密模块加密某些数据,然后尝试将其存储在我的SQL数据库中。当它是一个字符串时,它可以工作。但是,当我尝试使用元组或字典时,它会失败。我有以下作为我的函数被调用。 (使用crypytography.Fernet.encrypt)。

def encrypt(to_encrypt):
    ''' Takes a bytestring and returns a token. '''
    key = get_key()
    f = make_fernet_object(key)
    token = f.encrypt(to_encrypt)
    return token

如果我试图直接传递一个元组或词典,我会得到

  

TypeError:数据必须是字节。

如果我使用

bytes(my_tuple)

然后我得到

  

TypeError:' str' object不能解释为整数

如何将我的元组(包含2个字符串和一个字典)转换为Fernet将加密的字节对象,以便将blob放入我的SQL数据库中?

编辑 - 有问题的元组采用格式..

my_tuple = ('username', 'password', {'memorable question':'memorable answer', 'memorable question 2', 'memorable answer 2'})

1 个答案:

答案 0 :(得分:1)

正如您的错误消息所示,encrypt仅接受字节作为输入。您可以将字符串格式化为字节,但不能格式化为元组,这是一系列python对象。您可以将元组中包含的两个字符串中的任何一个传递给bytes(),或者将它们分隔并连接为单个字符串并传递它,但是您不能传递元组本身(不指定将其转换为字符串的方法)并将所述字符串恢复为元组。)

https://cryptography.io/en/latest/_modules/cryptography/fernet/