Question

Afin de vérifier les données provenant de API de navigation Google Safe , vous pouvez calculer un code d’authentification de message (MAC) pour chaque mise à jour. Les instructions pour le faire (à partir de Google) sont les suivantes:

  

Le MAC est calculé à partir d'un sommaire MD5.   sur les informations suivantes:   client_key | separator | table   data | separator | client_key. le   le séparateur est la chaîne: coolgoog: -   c'est un colon suivi de "coolgoog"   suivi d'un colon. La résultante   Le condensé MD5 128 bits est Websafe base-64   codé.

Vous trouverez également des exemples de données à vérifier:

client key: "8eirwN1kTwCzgWA2HxTaRQ=="

réponse:

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

Je suis incapable d'obtenir un match. Indiquez les points où je me trompe ou écrivez simplement les quelques lignes de code Python nécessaires pour le faire!

FWIW, je m'attendais à pouvoir faire quelque chose comme ceci:

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

Mais comme vous pouvez le constater, 'qfb50mxpHrS82yTofPkcEg == \ n'! = 'dRalfTU + bXwUhlk0NCGJtQ =='.

Était-ce utile?

La solution

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

Autres conseils

La réponse de Anders fournit les informations nécessaires, mais n'est-ce pas clair: la clé du client doit être décodée avant d'être combinée. (Dans l'exemple ci-dessus, il manque également une nouvelle ligne à la fin des données de la table finale).

Le code de travail est donc:

>>> 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'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top