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 =='.

Foi útil?

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'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top