Кодировка кортежа или диктовки в Python? - PullRequest
0 голосов
/ 03 июня 2018

Я использую модуль криптографии для шифрования некоторых данных, а затем пытаюсь сохранить их в своей базе данных SQL.Когда это строка, это работает.Однако, когда я пытаюсь использовать кортеж или dict, это терпит неудачу.В качестве вызываемой функции у меня есть следующее.(использует 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' не может быть интерпретирован как целое число

Как мне превратить мой кортеж (который содержит 2 строки и dict) в байтовый объект, который Fernet будет шифровать, чтобы я мог поместить большой двоичный объект в свою базу данных SQL?

edit - Рассматриваемый кортежв формате ..

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

1 Ответ

0 голосов
/ 03 июня 2018

Как говорится в ваших сообщениях об ошибках, encrypt принимает в качестве входных данных только байты.Вы можете отформатировать строку в байтах, но не в кортеже, который представляет собой последовательность объектов Python.Вы можете передать любую из двух строк, содержащихся в кортеже, на bytes(), или разделить и объединить их как одну строку и передать ее, но вы не можете передать сам кортеж (без указания метода преобразования его в строку и восстановленияуказанная строка как кортеж).

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

...