前回記事MD5のハッシュ化でソルトを行う。の続きで、様々なハッシュ化アルゴリズムについて少し考えていきます。10月4日記事。

目次





MD5以外のハッシュ化アルゴリズムについて考える。

md5は有名ですが、それ以外のものも色々と登場してきているので、紹介。

コード

適当なパスワードを入れるコード

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>パスワード挿入</title>
</head>
<body>
<form action="confirm.php" method="post">
	<label for="password">パスワード</label>
	<input type="text" name="str">
	<input type="submit" name="submit" value="送信">
</form>
</body>
</html>

ハッシュ化したものと文字数を取得するコード

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>色々なハッシュ化</title>
</head>
<body>
<?php
$str = $_POST["str"];

echo "md5<br>";
echo md5($str)."<br>で".strlen(md5($str))."文字<br>";
echo "sha1<br>";
echo sha1($str)."<br>で".strlen(sha1($str))."文字<br>";
//echo "sha256<br>";
//以下のように書いたらエラーになります。
//echo sha256($str)."<br><br>";

echo "<br>";
echo "hash関数を用いた表記:<br>";
echo "md5<br>";
echo hash("md5",$str)."<br>で".strlen(hash("md5",$str))."文字<br>";
echo "sha1<br>";
echo hash("sha1",$str)."<br>で".strlen(hash("sha1",$str))."文字<br>";
echo "sha256<br>";
echo hash("sha256",$str)."<br>で".strlen(hash("sha256",$str))."文字<br>";
echo "sha512<br>";
echo hash("sha512",$str)."<br>で".strlen(hash("sha512",$str))."文字<br>";
echo "haval160,4<br>";
echo hash("haval160,4",$str)."<br>で".strlen(hash("haval160,4",$str))."文字<br>";
//もっと色々とハッシュアルゴリズムはあります。
//http://php.net/manual/ja/function.hash.phpを見てみてください。

//ソルト化
$passsalt = 'nanikanomojiretu';
echo "<br><br>";
echo "ソルト化。パスワードの文字列にランダムな文字列を付け加えてハッシュ化<br>";
echo "md5ソルト。<br>";
echo hash("md5",$str.$passsalt)."<br>で".strlen(hash("md5",$str.$passsalt))."文字<br>";
echo "sha512ソルト。破られてないけど、破られた時のために。。<br>";
echo hash("sha512",$str.$passsalt)."<br>で".strlen(hash("sha512",$str.$passsalt))."文字<br>";

?>
</body>
</html>



実行結果

仮にpasswordというpasswordを入力してみます。

 md5
5f4dcc3b5aa765d61d8327deb882cf99
で32文字
sha1
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
で40文字

hash関数を用いた表記:
md5
5f4dcc3b5aa765d61d8327deb882cf99
で32文字
sha1
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
で40文字
sha256
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
で64文字
sha512
b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86
で128文字
haval160,4
757921aaa14a05363dd9bea6a5cafa622333d191
で40文字


ソルト化。パスワードの文字列にランダムな文字列を付け加えてハッシュ化
md5ソルト。
47b7f635d05d47cc13d148da4c1db729
で32文字
sha512ソルト。破られてないけど、破られた時のために。。
4fa3e45dacf1ce7b71db20ab2a1a7185e25dbc58e912e5773285b933e594910d3573698c69d477a45ea7e0d927e38707a677e2aac9fb33881c69d2f2507e62c2
で128文字



まとめ

色々とありすぎて、どれを採用しようか迷うところではありますが、md5の5f4dcc3b5aa765d61d8327deb882cf99は超有名です。passowrdというpasswordにしないようにしましょう。ソルト化したとしても、やはり辞書攻撃の対象にもはいっていますので危険です。
PHPマニュアルはhttp://php.net/manual/ja/function.hash.phpです。

以上