【发布时间】:2018-06-03 12:27:26
【问题描述】:
我正在使用加密模块加密一些数据,然后尝试将其存储在我的 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
如果我尝试将元组或字典直接传递给它,我会得到 p>
TypeError:数据必须是字节。
如果我使用
bytes(my_tuple)
然后我得到
TypeError: 'str' 对象不能被解释为整数
如何将我的元组(包含 2 个字符串和一个 dict)转换为 Fernet 将加密的字节对象,以便我可以将 blob 放入我的 SQL 数据库中?
edit - 有问题的元组采用格式..
my_tuple = ('username', 'password', {'memorable question':'memorable answer', 'memorable question 2', 'memorable answer 2'})
【问题讨论】:
-
您必须
encode()字符串才能转换为字节,例如你可以bytes(str(my_tuple).encode('utf-8')),但很难说这是否符合你的要求。 -
@AChampion
str(my_tuple)将产生元组文字的字符串表示,可能不是 OP 所想的。 (我假设只有元组的内容很重要。) -
很可能,不清楚 OP 想要什么 - 他提到了
blob,所以想知道他是否想稍后恢复元组,也许应该使用repr()。 -
有没有考虑
pickle所以序列化对象? -
抱歉,不够清晰。最终,我试图将元组的内容(在答案中定义)存储在数据库中,然后能够稍后检索它以访问其各个部分。我没有被困在一个元组上,一个列表就可以了。我只是想我应该使用元组,因为内容永远不会改变。
str(my_tuple)有效,但之后我必须进行字符串操作以检索各个部分。对于用户名 + 密码来说这很容易,但对于 dict 来说就更难了。
标签: python python-3.x dictionary tuples byte