Codice per verificare gli aggiornamenti dall'API di Navigazione sicura di Google
-
05-07-2019 - |
Domanda
Per verificare i dati provenienti dalla API di navigazione sicura di Google , puoi calcolare un codice di autenticazione dei messaggi (MAC) per ciascun aggiornamento. Le istruzioni per farlo (da Google) sono:
Il MAC è calcolato da un digest MD5 sulle seguenti informazioni: client_key | Separatore | tavolo Dati | Separatore | client_key. Il il separatore è la stringa: coolgoog: - questo è un colon seguito da "coolgoog" seguito da due punti. Il risultato Il digest MD5 a 128 bit è websafe base-64 codificati.
Esistono anche dati di esempio da verificare:
client key: "8eirwN1kTwCzgWA2HxTaRQ=="
Risposta:
[goog-black-hash 1.180 update][mac=dRalfTU+bXwUhlk0NCGJtQ==]
+8070465bdf3b9c6ad6a89c32e8162ef1
+86fa593a025714f89d6bc8c9c5a191ac
+bbbd7247731cbb7ec1b3a5814ed4bc9d
*Note that there are tabs at the end of each line.
Non riesco a trovare una corrispondenza. Per favore, indica dove sto sbagliando, o semplicemente scrivi un paio di righe di codice Python necessarie per farlo!
FWIW, mi aspettavo di poter fare qualcosa del genere:
>>> 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'
Ma come puoi vedere, 'qfb50mxpHrS82yTofPkcEg == \ n'! = 'dRalfTU + bXwUhlk0NCGJtQ =='.
Soluzione
c="8eirwN1kTwCzgWA2HxTaRQ==".decode('base64')
Altri suggerimenti
La risposta di Anders fornisce le informazioni necessarie, ma non è così chiaro: la chiave del client deve essere decodificata prima di essere combinata. (Nell'esempio sopra manca anche una nuova riga alla fine dei dati del tavolo finale).
Quindi il codice di lavoro è:
>>> 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'