验证来自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'