验证来自Google安全浏览API的更新的代码
问题描述:
为了验证来自Google Safe Browsing API的数据,您可以计算每次更新的消息验证代码(MAC)。所述指令执行此操作(来自谷歌)是:验证来自Google安全浏览API的更新的代码
的MAC是从MD5摘要 上计算的以下信息: client_key |隔板|表 数据|隔板| client_key。 分隔符是字符串:coolgoog: - 这是一个冒号后跟一个冒号“coolgoog” 。得到的 128位MD5摘要是websafe base-64编码的 。
还有例如数据核对:
client key: "8eirwN1kTwCzgWA2HxTaRQ=="
响应:
[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')
答
安德斯的答案给出了必要的信息,但不是那么清楚:客户端密钥在组合之前需要解码。 (上面的例子在最终表格数据末尾也缺少一个换行符)。
因此,工作代码为:
>>> 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'