Código para verificar atualizações a partir do API Google Navegação segura
-
05-07-2019 - |
Pergunta
A fim de verificar os dados provenientes do Google Safe Browsing API , você pode calcular um código de autenticação de mensagem (MAC) para cada atualização. As instruções para fazer isso (do Google) são:
O MAC é calculado a partir de um MD5 Digest sobre as seguintes informações: client_key | separador | mesa dados | separador | client_key. o separador é a string: coolgoog: - que é um cólon seguido por "coolgoog" seguida de dois pontos. O resultado 128 bits é resumo MD5 de base 64 websafe codificado.
Há também dados de exemplo para verificar contra:
client key: "8eirwN1kTwCzgWA2HxTaRQ=="
resposta:
[goog-black-hash 1.180 update][mac=dRalfTU+bXwUhlk0NCGJtQ==]
+8070465bdf3b9c6ad6a89c32e8162ef1
+86fa593a025714f89d6bc8c9c5a191ac
+bbbd7247731cbb7ec1b3a5814ed4bc9d
*Note that there are tabs at the end of each line.
Eu sou incapaz de começar uma partida. Por favor, quer apontar onde eu estou indo errado, ou simplesmente escrever o par de linhas de código Python necessário fazê-lo!
FWIW, eu esperava ser capaz de fazer algo parecido com isto:
>>> 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'
Mas como você pode ver, 'qfb50mxpHrS82yTofPkcEg == \ n'! = 'DRalfTU + bXwUhlk0NCGJtQ =='.
Solução
c="8eirwN1kTwCzgWA2HxTaRQ==".decode('base64')
Outras dicas
resposta Anders' dá a informação necessária, mas não é tão clara: necessidades a chave do cliente para ser decodificado antes de ser combinado. (O exemplo acima é também uma nova linha em falta no fim dos dados da tabela final).
Assim, o código de trabalho é:
>>> 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'