我使用加密模块加密某些数据,然后尝试将其存储在我的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'})
答案 0 :(得分:1)
正如您的错误消息所示,encrypt
仅接受字节作为输入。您可以将字符串格式化为字节,但不能格式化为元组,这是一系列python对象。您可以将元组中包含的两个字符串中的任何一个传递给bytes()
,或者将它们分隔并连接为单个字符串并传递它,但是您不能传递元组本身(不指定将其转换为字符串的方法)并将所述字符串恢复为元组。)
https://cryptography.io/en/latest/_modules/cryptography/fernet/