Google Safe Browsing APIからの更新を検証するコード
-
05-07-2019 - |
質問
Google Safe Browsing API からのデータを確認するため、更新ごとにメッセージ認証コード(MAC)を計算できます。これを行うための手順は(Googleから)です:
MACはMD5ダイジェストから計算されます 次の情報を介して: client_key | separator | table data | separator | client_key。の separatorはstring:coolgoogです:- これはコロンで、その後に「coolgoog」が続きます。 コロンが続きます。結果として 128ビットMD5ダイジェストは、websafe base-64です エンコード。
チェックするデータの例もあります:
client key: "8eirwN1kTwCzgWA2HxTaRQ=="
response:
[goog-black-hash 1.180 update][mac=dRalfTU+bXwUhlk0NCGJtQ==]
+8070465bdf3b9c6ad6a89c32e8162ef1
+86fa593a025714f89d6bc8c9c5a191ac
+bbbd7247731cbb7ec1b3a5814ed4bc9d
*Note that there are tabs at the end of each line.
一致するものを取得できません。間違っている箇所を指摘するか、これを行うために必要なPythonコードを数行書いてください!
FWIW、私は次のようなことができると期待していました:
>>> 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'
しかし、ご覧のとおり、「qfb50mxpHrS82yTofPkcEg == \ n」!=「dRalfTU + bXwUhlk0NCGJtQ ==」
解決
c="8eirwN1kTwCzgWA2HxTaRQ==".decode('base64')
他のヒント
Andersの答えは必要な情報を提供しますが、それほど明確ではありません。クライアントキーは、結合する前にデコードする必要があります。 (上記の例では、最終的なテーブルデータの最後に改行もありません。)
したがって、動作するコードは次のとおりです。
>>> 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'
所属していません StackOverflow