Pregunta

Para verificar los datos provenientes de API de navegación segura de Google , puede calcular un Código de autenticación de mensaje (MAC) para cada actualización. Las instrucciones para hacer esto (de Google) son:

  

El MAC se calcula a partir de un compendio MD5   sobre la siguiente información:   client_key | separador | tabla   datos | separador | client_key. los   separador es la cadena: coolgoog: -   es un punto seguido de " coolgoog "   seguido de dos puntos. La resultante   El resumen de MD5 de 128 bits es seguro para la base 64   codificado.

También hay datos de ejemplo para verificar:

client key: "8eirwN1kTwCzgWA2HxTaRQ=="

respuesta:

[goog-black-hash 1.180 update][mac=dRalfTU+bXwUhlk0NCGJtQ==]
+8070465bdf3b9c6ad6a89c32e8162ef1   
+86fa593a025714f89d6bc8c9c5a191ac
+bbbd7247731cbb7ec1b3a5814ed4bc9d
*Note that there are tabs at the end of each line.

No puedo conseguir una coincidencia. ¡Por favor, señale dónde me equivoco o simplemente escriba las líneas de código Python necesarias para hacer esto!

FWIW, esperaba poder hacer algo como esto:

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

Pero como puedes ver, 'qfb50mxpHrS82yTofPkcEg == \ n'! = 'dRalfTU + bXwUhlk0NCGJtQ =='.

¿Fue útil?

Solución

c="8eirwN1kTwCzgWA2HxTaRQ==".decode('base64')

Otros consejos

La respuesta de Anders proporciona la información necesaria, pero no está tan clara: la clave del cliente debe decodificarse antes de combinarse. (En el ejemplo anterior también falta una nueva línea al final de los datos de la mesa final).

Entonces el código de trabajo es:

>>> 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top