「Pythonでhmacを計算する」の版間の差分
提供: Python入門
(ページの作成:「PythonでHMAC(Hash-based Message Authentication Code)を求めるサンプルプログラムです。ここでは、md5 sha1 sha224 sha256 sha384 sha512などのハッ...」) |
(相違点なし)
|
2014年1月26日 (日) 18:53時点における版
Pythonで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
関連項目
- Pythonでmd5を計算する
- Pythonでsha1を計算する
- Pythonでsha224を計算する
- Pythonでsha256を計算する
- Pythonでsha384を計算する
- Pythonでsha512を計算する
- Pythonでhmacを計算する
- Pythonで2進数を扱う
- Pythonで8進数を扱う
- Pythonで10進数を扱う
- Pythonで16進数を扱う
- Pythonでbase64を扱う
- Pythonでuuencodeを扱う
- Pythonでrot13を扱う
- Pythonで任意のrotを扱う