new takyam();

Qiitaぽい話はQiitaに書いていくことにする気がする http://qiita.com/takyam

PHPのhash関数で使えるアルゴリズムとハッシュ化後の文字数

PHPで使えるハッシュアルゴリズムは数あれど、普段はsha512とかしか使わないので、他にどんなアルゴリズムが使えるのかなと思って調べてみました。

アルゴリズム ハッシュ後の文字数 ハッシュ後の値
md2 32 8fa92a81e7d8a72b35f6...
md4 32 7abeea0e8263e51dc0ea...
md5 32 3fda63189cefa52b6c46...
sha1 40 d508c652210e04db0cb8...
sha224 56 fdb3ceb76888f9fe2cd2...
sha256 64 b4047d6b10734a3ffa51...
sha384 96 58bd4facf707e8ad44c0...
sha512 128 d4a7eaeabaa5bb278dcb...
ripemd128 32 af7dd7ffdc304ee8a7e5...
ripemd160 40 69300ed41e7248525d4b...
ripemd256 64 9d1b3f0ff1e451d9cb7d...
ripemd320 80 2b98d24ef151026f6c1f...
whirlpool 128 cda03e10f481928f282d...
tiger128,3 32 5b57ab4960615ba99538...
tiger160,3 40 5b57ab4960615ba99538...
tiger192,3 48 5b57ab4960615ba99538...
tiger128,4 32 fb8f43cc374c6cbb83f9...
tiger160,4 40 fb8f43cc374c6cbb83f9...
tiger192,4 48 fb8f43cc374c6cbb83f9...
snefru 64 3770205302bf9fdfdbed...
snefru256 64 3770205302bf9fdfdbed...
gost 64 98bcbe7e0a0519e9227b...
adler32 8 0a110214
crc32 8 8a32dc08
crc32b 8 96ca22e1
salsa10 128 e5dba67a5a0ad3ab3395...
salsa20 128 d565e7b137317ee2c250...
haval128,3 32 17db26d84f78dedac3b6...
haval160,3 40 f4cde2003f3a0a21c1ad...
haval192,3 48 a60a5ca307812831ba34...
haval224,3 56 3eceafb480650a6dee89...
haval256,3 64 423a2c010ffc75652310...
haval128,4 32 cf36730d8c11c961e52d...
haval160,4 40 004c5fc847fe8df6a476...
haval192,4 48 efbbf5628737f69a63b3...
haval224,4 56 6b669c904b6014c7db01...
haval256,4 64 01c963ac67ce6a8ec31c...
haval128,5 32 b14a2ea7350b9e771236...
haval160,5 40 83a020f2362e0571162d...
haval192,5 48 1f87bed2293dd0b86927...
haval224,5 56 f22283ad2555eb2d94f3...
haval256,5 64 0186abc5f24b927dfce0...

上記表を生成したソースコードは以下です。

<?php
$algos = hash_algos();
echo 'アルゴリズム | ハッシュ後の文字数 | ハッシュ後の値 ' . PHP_EOL;
echo '-----------|----------------|----------------' . PHP_EOL;
foreach($algos as $algo){
    $hashed = hash($algo, 'HOGE_001');
    echo implode(' | ', array(
        '***' . $algo . '***',
        strlen($hashed),
        substr($hashed, 0, 20) . (strlen($hashed) > 20 ? '...' : '')
    )) . PHP_EOL;
}

Hash関数に関しての詳細は以下の公式ドキュメントをご覧ください。

Hash関数
http://php.net/manual/ja/ref.hash.php

当然のことながら、どんな文字列を渡しても、返ってくる文字数に変わりはないようでした。