Преобразование x5t JWT отпечатка пальца в Python

#python #azure #jwt #base64 #certificate

#python #azure #jwt #base64 #сертификат

Вопрос:

Я пытаюсь сгенерировать параметр x5t для заголовка, чтобы отправить запрос в Azure с использованием сертификата для аутентификации. В примере, приведенном в документах здесь: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-certificate-credentials , это говорит о том, что хэш SHA-1 84E05C1D98BCE3A5421D225B140B36E86A3D5534 должен давать значение x5t hOBcHZi846VCHSJbFAs26Go9VTQ =

Когда я пытаюсь преобразовать этот хэш, используя следующее, я нахожу значение x5t равным ODRFMDVDMUQ5OEJDRTNBNTQyMUQyMjVCMTQwQjM2RTg2QTNENTUzNA==

Что я делаю не так в процессе преобразования?

 import base64
x="84E05C1D98BCE3A5421D225B140B36E86A3D5534"
x5t = base64.b64encode(x.encode()).decode()
print(x)
 

Ответ №1:

Заданный хэш SHA-1

 84E05C1D98BCE3A5421D225B140B36E86A3D5534
 

является длинным шестнадцатеричным числом. В вашем коде вы обрабатываете его как строку (например, «84»), но вам нужно интерпретировать его как шестнадцатеричное представление массива байтов (например, первый байт равен 0x84):

 import base64
x = "84E05C1D98BCE3A5421D225B140B36E86A3D5534"
x5t = base64.b64encode(bytearray.fromhex(x))
print(x5t.decode())
 

Результатом является:

hOBcHZi846VCHSJbFAs26Go9VTQ =

Комментарии:

1. Спасибо, это имеет смысл