3

为了验证来自Google 安全浏览 API的数据,您可以计算每次更新的消息验证码 (MAC)。执行此操作的说明(来自 Google)是:

MAC 是从 MD5 摘要中根据以下信息计算得出的:client_key|separator|table data|separator|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=='。

4

2 回答 2

2

安德斯的回答提供了必要的信息,但不是很清楚:客户端密钥需要在组合之前进行解码。(上面的示例也缺少在最终表格数据末尾的换行符)。

所以工作代码是:

>>> 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'
于 2008-10-08T20:07:42.630 回答
1
c="8eirwN1kTwCzgWA2HxTaRQ==".decode('base64')
于 2008-10-08T10:47:51.030 回答