我必须计算一个密码才能连接到api服务。要求是:
Password = base64 encoded(sha1(nonce+created+secret))
where:
nonce = 186269
created = 2015-07-08T11:31:53+01:00
secret = Ok4IWYLBHbKn8juM1gFPvQxadieZmS2
必须给ZDg3MTZiZTgwYTMwYWY4Nzc4OGFjMmZhYjA5YzM3MTdlYmQ1M2ZkMw==
作为密码。我正在接近:
psw = hashlib.sha1()
psw.update(b"186269")
psw.update(b"2015-07-08T11:31:53+01:00")
psw.update(b"Ok4IWYLBHbKn8juM1gFPvQxadieZmS2")
enc_psw = base64.b64encode(psw.digest())
但它给了我2HFr6Aowr4d4isL6sJw3F+vVP9M=
作为结果
从'ZDg3MTZiZTgwYTMwYWY4Nzc4OGFjMmZhYjA5YzM3MTdlYmQ1M2ZkMw=='
的长度来看,很明显这不是原始的消息摘要。 SHA-1输出20个字符(160位)字节串。
如果我们通过b64decode()
运行,我们得到
b'd8716be80a30af87788ac2fab09c3717ebd53fd3'
这看起来像是SHA-1摘要的十六进制表示而不是原始位。它只包含十六进制数字,长度恰好为40个字符。每位4位,我们从SHA-1得到160位。
我们试试吧:
>>> enc_psw = base64.b64encode(psw.hexdigest().encode('ASCII'))
>>> print(enc_psw)
b'ZDg3MTZiZTgwYTMwYWY4Nzc4OGFjMmZhYjA5YzM3MTdlYmQ1M2ZkMw=='