Код для проверки обновлений API безопасного просмотра Google.
-
05-07-2019 - |
Вопрос
Для проверки данных, поступающих от API безопасного просмотра Google, вы можете рассчитать код аутентификации сообщения (MAC) для каждого обновления.Инструкции для этого (от Google):
Mac вычисляется из дайджеста MD5 по следующей информации:client_key | Разделитель | Данные таблицы | Разделитель | client_key.Сепаратор - это строка: coolgoog:- Это толстая кишка, за которой следует «Coolgoog», за которой следует толстая кишка.Результирующий 128-битный Digest MD5-это кодируется веб-базовая 64.
Также есть примеры данных для проверки:
client key: "8eirwN1kTwCzgWA2HxTaRQ=="
ответ:
[goog-black-hash 1.180 update][mac=dRalfTU+bXwUhlk0NCGJtQ==]
+8070465bdf3b9c6ad6a89c32e8162ef1
+86fa593a025714f89d6bc8c9c5a191ac
+bbbd7247731cbb7ec1b3a5814ed4bc9d
*Note that there are tabs at the end of each line.
Я не могу найти совпадение.Пожалуйста, либо укажите, где я ошибаюсь, либо просто напишите пару строк кода Python, необходимых для этого!
Кстати, я ожидал, что смогу сделать что-то вроде этого:
>>> s = "+8070465bdf3b9c6ad6a89c32e8162ef1\t\n+86fa593a025714f89d6bc8c9c5a191ac\t\n+bbbd7247731cbb7ec1b3a5814ed4bc9d\t"
>>> c = "8eirwN1kTwCzgWA2HxTaRQ=="
>>> hashlib.md5("%s%s%s%s%s" % (c, ":coolgoog:", s, ":coolgoog:", c)).digest().encode("base64")
'qfb50mxpHrS82yTofPkcEg==\n'
Но, как вы можете видеть, 'qfb50mxpHrS82yTofPkcEg== ' != 'dRalfTU+bXwUhlk0NCGJtQ=='.
Решение
c="8eirwN1kTwCzgWA2HxTaRQ==".decode('base64')
Другие советы
Ответ Андерса дает необходимую информацию, но не так ясен:ключ клиента необходимо декодировать перед его объединением.(В приведенном выше примере также отсутствует новая строка в конце окончательных данных таблицы).
Итак, рабочий код:
>>> s = "+8070465bdf3b9c6ad6a89c32e8162ef1\t\n+86fa593a025714f89d6bc8c9c5a191ac\t\n+bbbd7247731cbb7ec1b3a5814ed4bc9d\t\n"
>>> c = "8eirwN1kTwCzgWA2HxTaRQ==".decode('base64')
>>> hashlib.md5("%s%s%s%s%s" % (c, ":coolgoog:", s, ":coolgoog:", c)).digest().encode("base64")
'dRalfTU+bXwUhlk0NCGJtQ==\n'