Я отправляю данные в формате Json между двумя узлами, используя функциональность модуля запросов Python на стороне клиента и сервер Flask на стороне сервера. Мне нужно поставить цифровую подпись строки Python 2.7 «некоторая строка» с закрытым ключом RSA и проверить подпись на стороне сервера. Для этой цели я выбрал модуль Pycryptodome. К сожалению, json.dumps() [из модуля Json Python] требует, чтобы подписанный хэш строки был преобразован из формы, которую выводит функция подписи Pycryptodome 'pss' (строка байтов), в строку юникода - для json требуется юникод: Как кодировать байты в JSON? json.dumps() выдает TypeError
Я использую функцию base64.b64encode() модуля base 64 для преобразования цифровой подписи в форму, которую может обрабатывать json.dumps() — подпись помещается в словарь python с некоторыми другими вещами перед jsonoficatoin — и декодирование на на стороне сервера с помощью base64.b64decode в надежде получить обратно строку байтов, которая может быть обработана функцией verify () Pycryptodome.
# client
hash = SHA256.new(some_string)
sig = pss.new(PrivKey).sign(hash)
finicky_Json = base64.b64encode(sig)
...
# server
hash = SHA256.new(some_string)
back_to_normal_sig = base64.b64decode(finicky_Json)
public_key_object = pss.new(PubKey)
public_key_object.verify(hash, back_to_normal_sig)`
К сожалению, я получаю ошибку типа:
raise TypeError("Object type %s cannot be passed to C code" % type(data))
TypeError: Object type <type 'unicode'> cannot be passed to C code
Что я упускаю? Спасибо