Python 2.7, Pycryptodome: невозможно проверить подпись закрытого ключа на стороне сервера из-за проблем с кодировкой

Я отправляю данные в формате 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 Что я упускаю? Спасибо


person H3G3moKnight    schedule 29.11.2019    source источник


Ответы (1)


Если вы передаете содержимое в формате ASCII (что и должно быть), вы можете обернуть строку Unicode, используя str().

person Roy Solberg    schedule 17.02.2020