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

问题描述 投票:-2回答:1

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

python python-3.x api authentication
1个回答
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=='
© www.soinside.com 2019 - 2024. All rights reserved.