Pythonでhmacを計算する

提供: Python入門
2014年1月26日 (日) 18:53時点におけるDaemon (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

Pythonでhmac(HMAC,Hash-based Message Authentication Code)を求めるサンプルプログラムです。ここでは、md5 sha1 sha224 sha256 sha384 sha512などのハッシュ関数を利用します。

読み方

hmac
えいちまっく

概要

HMACは、暗号ハッシュ関数を使用して、メッセージ認証を行う仕組みです。 ハッシュ関数と秘密鍵を組み合わせて使用します。 秘密鍵を変更するとメッセージが同じであっても、異なるハッシュ値となります。

  • 1つ目と2つ目は、同じ鍵、同じメッセージであるため、2つのハッシュ値は同じになります。関数の呼び出し方が少し異なるだけです。
  • 3つ目は、1,2番目と異なる秘密鍵を使用しているため、メッセージは、1,2と同じですが、ハッシュ値が異なります。

hmacを求める

hmac.new()の第三引数でハッシュタイプを指定しない場合、デフォルトのハッシュ関数が使用されます。標準では、hashlib.md5()です。

ソースコード hmac_simple.py

#!/usr/bin/env python
import hmac
import hashlib
key="secret"
text="foo bar"
signature=hmac.new(key,text).hexdigest()
print signature
 
m=hmac.new(key,'',hashlib.md5)
m.update("foo ")
m.update("bar")
signature=m.hexdigest()
print signature
 
key="secret2"
text="foo bar"
signature=hmac.new(key,text,hashlib.md5).hexdigest()
print signature

実行例

ffc1c787a53450606e9206bea1af3cc5
ffc1c787a53450606e9206bea1af3cc5
5ecd2abb84b7542f222ab4a80cb0aea1

hmac-md5を求める

ソースコード hmac_md5.py

#!/usr/bin/env python
import hmac
import hashlib
key="secret"
text="foo bar"
signature=hmac.new(key,text,hashlib.md5).hexdigest()
print signature
 
m=hmac.new(key,'',hashlib.md5)
m.update("foo ")
m.update("bar")
signature=m.hexdigest()
print signature
 
key="secret2"
text="foo bar"
signature=hmac.new(key,text,hashlib.md5).hexdigest()
print signature

実行例

ffc1c787a53450606e9206bea1af3cc5
ffc1c787a53450606e9206bea1af3cc5
5ecd2abb84b7542f222ab4a80cb0aea1

hmac-sha1を求める

ソースコード hmac_sha1.py

#!/usr/bin/env python
import hmac
import hashlib
key="secret"
text="foo bar"
signature=hmac.new(key,text,hashlib.sha1).hexdigest()
print signature
 
m=hmac.new(key,'',hashlib.sha1)
m.update("foo ")
m.update("bar")
signature=m.hexdigest()
print signature
 
key="secret2"
text="foo bar"
signature=hmac.new(key,text,hashlib.sha1).hexdigest()
print signature

実行例

fcd989406e11db15aa3b76a7a7e10541f6462b8b
fcd989406e11db15aa3b76a7a7e10541f6462b8b
7e3b9ce48e9416429a020f98ad6b51f9341aff90

hmac-sha224を求める

ソースコード hmac_sha224.py

#!/usr/bin/env python
import hmac
import hashlib
key="secret"
text="foo bar"
signature=hmac.new(key,text,hashlib.sha224).hexdigest()
print signature
 
m=hmac.new(key,'',hashlib.sha224)
m.update("foo ")
m.update("bar")
signature=m.hexdigest()
print signature
 
key="secret2"
text="foo bar"
signature=hmac.new(key,text,hashlib.sha224).hexdigest()
print signature

実行例

f1dbaa7d7f24292965aad8eed31272d538fba6fed58af8ad6e2ae98a
f1dbaa7d7f24292965aad8eed31272d538fba6fed58af8ad6e2ae98a
dc8e6e546b5bd688609c1f63a9ba41e486a05bf4625f50fe57c2038c

hmac-sha256を求める

ソースコード hmac_sha256.py

#!/usr/bin/env python
import hmac
import hashlib
key="secret"
text="foo bar"
signature=hmac.new(key,text,hashlib.sha256).hexdigest()
print signature
 
m=hmac.new(key,'',hashlib.sha256)
m.update("foo ")
m.update("bar")
signature=m.hexdigest()
print signature
 
key="secret2"
text="foo bar"
signature=hmac.new(key,text,hashlib.sha256).hexdigest()
print signature

実行例

8a5b6a2cc6a85e2756230918c513d645c9b33e294d67277a5ee718cb6b944224
8a5b6a2cc6a85e2756230918c513d645c9b33e294d67277a5ee718cb6b944224
4239d62f4b3e934661380f19befde7954197543f2c074730852e1ee5a1598db0

hmac-sha384を求める

ソースコード hmac_sha384.py

#!/usr/bin/env python
import hmac
import hashlib
key="secret"
text="foo bar"
signature=hmac.new(key,text,hashlib.sha384).hexdigest()
print signature
 
m=hmac.new(key,'',hashlib.sha384)
m.update("foo ")
m.update("bar")
signature=m.hexdigest()
print signature
 
key="secret2"
text="foo bar"
signature=hmac.new(key,text,hashlib.sha384).hexdigest()
print signature

実行例

意図的にハッシュ値に改行を入れています。

cc9a3767f65d3d3d73dd43405d0101b8aa4481645f6543a042c6991936fabac6b8815ca00a4d0e
fe24f8a371c7f9a95c
cc9a3767f65d3d3d73dd43405d0101b8aa4481645f6543a042c6991936fabac6b8815ca00a4d0e
fe24f8a371c7f9a95c
bf711e897c685138d8082a0cbf60b7cd6bca64297238bb33d7d12d9c89077d7ee08cb586d8b9f3
ca5cb1471276724832

hmac-sha512を求める

ソースコード hmac_sha512.py

#!/usr/bin/env python
import hmac
import hashlib
key="secret"
text="foo bar"
signature=hmac.new(key,text,hashlib.sha512).hexdigest()
print signature
 
m=hmac.new(key,'',hashlib.sha512)
m.update("foo ")
m.update("bar")
signature=m.hexdigest()
print signature
 
key="secret2"
text="foo bar"
signature=hmac.new(key,text,hashlib.sha512).hexdigest()
print signature

実行例

意図的にハッシュ値に改行を入れています。

1dfaf867603cce49256a1be9b372620f8d2de9ce23be154564b589c30cf4ca3896f923
c66ea678e4b3d3dcc33bff3830cae0e71a88be8c596671f0822b4a99ee
1dfaf867603cce49256a1be9b372620f8d2de9ce23be154564b589c30cf4ca3896f923
c66ea678e4b3d3dcc33bff3830cae0e71a88be8c596671f0822b4a99ee
f0facfa262b822421a49afd17fab4bfffdbcc3b45348afcf93748af8bd65534770b1c3
86663322c4d620de127a297d5c47514e38f382b0f195fc098ce2802867

関連項目





スポンサーリンク