HMAC: Keyed-Hashing for Message Authentication メッセージ認証のための鍵付ハッシング
■式
H(K XOR opad, H(K XOR ipad, text))
ipad = バイト値 0x36 を 64 回繰り返した文字列
opad = バイト値 0x5C を 64 回繰り返した文字列
1 #!/usr/bin/perl 2 3 use strict; 4 use warnings; 5 6 use Digest::MD5 qw(md5_hex); 7 use Digest::SHA1 qw(sha1_hex); 8 use Digest::HMAC_MD5 qw(hmac_md5_hex); 9 use Digest::HMAC_SHA1 qw(hmac_sha1_hex); 10 use Benchmark; 11 my $count = 1000000; 12 my $sec_key = 'oniichan doite soitsu korosenai akosan ha majo nanoyo'; 13 timethese($count, 14 { 15 'MD5_HEX' => sub { md5_hex(rand()); }, 16 'SHA1_HEX' => sub { sha1_hex(rand()); }, 17 'HMAC_MD5' => sub { hmac_md5_hex(rand(), $sec_key); }, 18 'HMAC_SHA1' => sub { hmac_sha1_hex(rand(), $sec_key);}, 19 } 20 );
Benchmark: timing 1000000 iterations of HMAC_MD5, HMAC_SHA1, MD5_HEX, SHA1_HEX... HMAC_MD5: 7 wallclock secs ( 7.62 usr + 0.00 sys = 7.62 CPU) @ 131233.60/s (n=1000000) HMAC_SHA1: 9 wallclock secs ( 9.02 usr + 0.00 sys = 9.02 CPU) @ 110864.75/s (n=1000000) MD5_HEX: 3 wallclock secs ( 2.11 usr + 0.00 sys = 2.11 CPU) @ 473933.65/s (n=1000000) SHA1_HEX: 3 wallclock secs ( 2.87 usr + 0.00 sys = 2.87 CPU) @ 348432.06/s (n=1000000)
遅いといえば遅いですが、気になるほどでもないのかなと判断。