验证来自Google安全浏览API的更新的代码
为了验证来自Google安全浏览API的数据,你可以为每次更新计算一个消息认证码(MAC)。Google给出的具体步骤是:
这个MAC是通过对以下信息进行MD5摘要计算得出的: client_key|分隔符|表 数据|分隔符|client_key。分隔符是字符串:coolgoog: - 也就是一个冒号后面跟着“coolgoog” 再跟一个冒号。最后得到的 128位MD5摘要会被转换成web安全的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代码来实现这个功能!
顺便说一下,我原本期待能做这样的事情:
>>> 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=='并不相等。
2 个回答
2
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'
1
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这就像你从冰箱拿出食材,然后在厨房里做饭一样。
有些时候,数据会以不同的格式出现,就像不同的食材有不同的形状和味道。我们需要把这些数据整理好,才能方便地使用它们。就像你在做饭前需要把食材切好、洗干净一样。
在这个过程中,可能会遇到一些问题,比如数据不完整或者格式不对。这就像你发现冰箱里缺少某种食材,或者某个食材坏掉了。遇到这些问题时,我们需要想办法解决,比如去超市买新的食材,或者用其他的食材替代。
总之,处理数据就像做饭一样,需要耐心和技巧,才能做出美味的菜肴。
c="8eirwN1kTwCzgWA2HxTaRQ==".decode('base64')