2017-12-16 1 views
-3

Ich muss ein Passwort für die Verbindung zu einem API-Service berechnen. Die Anforderung ist:Passwort Auth Hashing mit Python 3

Password = base64 encoded(sha1(nonce+created+secret)) 
where: 
     nonce = 186269 
     created = 2015-07-08T11:31:53+01:00 
     secret = Ok4IWYLBHbKn8juM1gFPvQxadieZmS2 

Muss ZDg3MTZiZTgwYTMwYWY4Nzc4OGFjMmZhYjA5YzM3MTdlYmQ1M2ZkMw== als Passwort zu geben. Ich näherte mit:

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()) 

aber es mich 2HFr6Aowr4d4isL6sJw3F+vVP9M= als Ergebnis

+0

Und was ist Ihre Frage? –

+0

@MonkeySupersonic Ich habe meine Frage bearbeitet – twindad

Antwort

1

es sich aus der Länge des 'ZDg3MTZiZTgwYTMwYWY4Nzc4OGFjMmZhYjA5YzM3MTdlYmQ1M2ZkMw==' geben ist schön, dass dies nicht die rohe Message Digest sein kann. SHA-1 gibt 20 Zeichen (160 Bit) Bytefolgen aus.

Wenn wir dies durch b64decode() laufen wir bekommen

b'd8716be80a30af87788ac2fab09c3717ebd53fd3' 

Das sieht fishily wie die hexadezimale Darstellung des SHA-1 ist anstelle der Rohbits verdauen. Es enthält nur Hexadezimalziffern und die Länge beträgt genau 40 Zeichen. Mit 4 Bits pro Stelle erhalten wir genau die 160 Bits von SHA-1.

Lassen Sie uns versuchen:

>>> enc_psw = base64.b64encode(psw.hexdigest().encode('ASCII')) 
>>> print(enc_psw) 
b'ZDg3MTZiZTgwYTMwYWY4Nzc4OGFjMmZhYjA5YzM3MTdlYmQ1M2ZkMw=='