使用python 3进行密码验证哈希

时间:2017-12-16 08:55:17

标签: python python-3.x api authentication

我必须计算一个密码才能连接到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=作为结果

1 个答案:

答案 0 :(得分:1)

'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=='