2017-12-16 14 views
-3

私はapiサービスに接続するためのパスワードを計算する必要があります。 要件は次のとおりです。パスワードとしてZDg3MTZiZTgwYTMwYWY4Nzc4OGFjMmZhYjA5YzM3MTdlYmQ1M2ZkMw==を与えるpythonを使ったパスワード認証ハッシュ3

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

必要があります。 私は近づいています:

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

が、それはそれ、これは生のメッセージダイジェストすることはできないことはかなり明白である'ZDg3MTZiZTgwYTMwYWY4Nzc4OGFjMmZhYjA5YzM3MTdlYmQ1M2ZkMw=='の長さから、結果

+0

そして、あなたの質問は何です:

はのは、試してみましょうか? –

+0

@MonkeySupersonic私の質問を編集しました – twindad

答えて

1

として私を2HFr6Aowr4d4isL6sJw3F+vVP9M=与えます。 SHA-1は20文字(160ビット)のバイト列を出力します。

我々はb64decode()を介してこれを実行すると、私たちはこれがSHA-1ダイジェストの16進表現の代わりに、生のビットいるように見えますfishily

b'd8716be80a30af87788ac2fab09c3717ebd53fd3' 

を取得します。それは16進数のみを含み、長さは正確に40文字です。 1桁あたり4ビットで、SHA-1から正確に160ビットが得られます。

>>> enc_psw = base64.b64encode(psw.hexdigest().encode('ASCII')) 
>>> print(enc_psw) 
b'ZDg3MTZiZTgwYTMwYWY4Nzc4OGFjMmZhYjA5YzM3MTdlYmQ1M2ZkMw==' 
関連する問題