「MD5のハッシュ化でソルトを行う。」の編集履歴(バックアップ)一覧に戻る

MD5のハッシュ化でソルトを行う。 - (2015/08/30 (日) 12:18:43) のソース

パスワードを扱うのに生パスワードをデータベースに挿入するのではなく、MD5でハッシュ化したものをデータベースに変換するtipsを考えていきます。8月28日記事
~
~
目次
#contents
~
~
----
~
*そのままパスワードを入れるのは危険
MD5はダイジェスト関数と呼ばれ、入れられた文字列をハッシュ化します。ハッシュ化とは簡単にいえば、ある一定の規則によって内容を省略した記載にしていくというものです。例えば「This is an apple」を一定の規則(先頭の文字を抜いて並べる)に従って行っていくと、「Tiaa」となります。このように入れられた文字をmd5は&color(red){0~fまでの32文字の文字列}にしていく方法がmd5です。

*しかし、簡単に変換したとしても危険
世の中のWEBサイトにはレインボーテーブルというものが存在し、md5化されたデータを集めて、md5化された文字列の元のもの(パスワード)は何か、導き出すサイトが存在します。例えば、passwordをmd5でハッシュ化すると、5f4dcc3b5aa765d61d8327deb882cf99となり、これはよく知られています。
~
~
*そこでパスワードSALTというものを行う。
passwordという文字列をmd5でハッシュ化する関数はmd5関数であり、
 echo md5('password');
と書きます。このように書くと5f4dcc3b5aa765d61d8327deb882cf99というように出てきます。
そこで、password8文字だけでなく、ある文字列を適当に加えて、md5でハッシュ化すると、5f4dcc3b5aa765d61d8327deb882cf99ではなくなります。コードを書いていきましょう。
~
~
*コード
追加する文字列は適当にパスワード生成サイトから持ってきました。
 <!DOCTYPE HTML>
 <html>
 <head>
 <meta charset="utf-8">
 <title>MD5のハッシュ化</title>
 </head>
 
 <body>
 <form action="index.php" method="post">
 <p>パスワードを入力してください。</p>
 <input type="text" name="pass" />
 <input type="submit" name="sub" value="発行" />
 </form>
 
 <?php
 
 if(isset($_POST["sub"])){
 	print '<br />';
 	print $_POST["pass"];
 	print '<br />が元のパスワードで<br />';
 	print 'ただ単にmd5化すると<br />';
 	print md5($_POST["pass"]);
 	print '<br />で、さらにソルト化すると<br />';
 	print md5($_POST["pass"].'DN8N7SKq');
 }

 
 
 print '<br />';
 print 'その他:passwordのMD5値は<br />'.md5('password');
 print '<br />';
 ?>
 
 </body>
 </html>
このように記述して、passwordというパスワードを入力してみると、5f4dcc3b5aa765d61d8327deb882cf99とは違くなるはずです。
~
~
*まとめ
このようにして、データベースに格納していけば、だれもわからないパスワードになります。もちろんデータベースとパスワードを照合するときもDN8N7SKqというものを加えて合致しているかというプログラムを書けば照合はできます。