2016-07-28 16 views
0

私はHMAC-SHA1アルゴリズムキーを使用してセキュリティアクセスpythonスクリプトを開発している間にpythonに執着しました。Python HMAC-SHA1計算が間違っている

私はすでにHMAC-SHA1ライブラリを含むpythonバージョン2.7を持っています。ライブラリを使って、以下のようにスクリプトを書こうとしました。しかし残念なことに私がスクリプトを実行すると、計算されたキーは私に与えられた予想されるキーとは異なります。

---------------コード開始--------------------------

from hashlib import sha1 
import hmac 
import base64 
import hashlib, binascii 
SecurityConst_key = "121a3ace5827a3b6" #(0x12 1A 3A CE 58 27 A3 B6) 
msg = "4272696C6C69616E63655F6175746F21" # Brilliance_auto! 
key = hmac.new(SecurityConst_key, msg, sha1).digest() 
key = base64.b64encode(key) 
print binascii.hexlify(key) 

----------------コードエンド----------------------

キー計算済次のとおりです。4d416963747a41737a546f774530464373536e4d646b6c323972673d

これは、左端の128ビットとは異なります。

期待キーは次のとおりです。0x15 4A ED 59 CF B3 2E DC 37 8D 30 6B 0F 02 AB 6B (。160ビットの結果を切り捨て出力HMACの左端の128ビット、それがキーです)

いくつかのいずれかは、可能な問題を解決するために私を助けてください。

答えて

0

実際には、何かがバイト文字列か16進文字列かを理解することが必要です。 Pythonでは、ほとんどのcryptoとmacとshaはバイナリ文字列を取ります。あなたの行:

SecurityConst_key = "121a3ace5827a3b6" #(0x12 1A 3A CE 58 27 A3 B6) 

は本当ではありません。実際には0x31 32 31 ...あなたのデータを最初に取得する必要があります。 "121a3ace5827a3b6" .decode( "hex")を入力する前に、キーとデータを16進数でデコードしてみてください。

一方、データの場合は、そのままの文字列を使用できます。

第2に、あなたは16進数としてオフに印刷する前に、macの出力をbase64でエンコーディングしています。それは間違っているようです。あなたはどちらかbase64それを見て、またはそれを16進エンコードし、それを見てください。 Base64はASCIIで印刷可能です(伝統的には16進数で印刷するハッシュ用)

関連する問題