Código para verificar las actualizaciones de la API de navegación segura de Google
-
05-07-2019 - |
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 =='.
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'