Код для проверки обновлений из API безопасного просмотра Google - PullRequest
1 голос
/ 08 октября 2008

Чтобы проверить данные, поступающие из API безопасного просмотра Google , вы можете рассчитать код аутентификации сообщений (MAC) для каждого обновления. Инструкции для этого (от Google):

MAC вычисляется из дайджеста MD5 по следующей информации: client_key | Сепаратор | таблица данные | Сепаратор | client_key. разделитель строки: coolgoog: - это двоеточие, за которым следует «coolgoog» с последующим двоеточием. Результирующий 128-битный MD5-дайджест является веб-базой Base-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, необходимых для этого!

FWIW, я ожидал, что смогу сделать что-то вроде этого:

>>> 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 == \ n'! = 'DRalfTU + bXwUhlk0NCGJtQ =='.

Ответы [ 2 ]

2 голосов
/ 09 октября 2008

Ответ Андерса дает необходимую информацию, но не так ясно: ключ клиента должен быть декодирован перед его объединением. (В приведенном выше примере также отсутствует символ новой строки в конце данных окончательной таблицы).

Итак, рабочий код:

>>> 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'
1 голос
/ 08 октября 2008
c="8eirwN1kTwCzgWA2HxTaRQ==".decode('base64')
...