PHPにはmd5を扱うための関数が標準で用意されています。
md5,md5_file
という関数なのですが md5 は文字列を与えるとその文字列に対応するハッシュ値を32文字で返してくれます。どんなに長い文字列や短い文字列も32文字になり、それぞれ個別の値になります。
例えば、md5("a") と md5("b") は全く違う値になります。
また、作成された32文字から元の a や b という文字を推測することは出来ません。
md5_file では 指定ファイルのMD5を計算できる。
悪意あるユーザなどによってサーバ上のファイルを変更されてしまったことなどを検出することが可能です。
データ改ざんを発見するために出来た技術だがいろいろと応用が利きます。
例えば、スクリプト内に直接パスワードを書いておくことは結構危ないが、md5化して保存しておけば、元の値が分からないわけだから、元のパスワードを盗み見られることはない。
$pass = "0cc175b9c0f1b6a831c399e269772661";
if (md5($_POST["password"]) == $pass) {
echo "認証成功!YES!";
}
こんな感じに認証できます。
また、長い文章を比較する際にも、予め md5 値をとって保存しておけば 32 文字の比較でよいため、処理も速くなるということもあると思います。
DB用の検索用キーにしても使えます。
例えば、長い文章があるとします。
長い文章のmd5を取っておきます。
長い文章の md5 は 1ac175b9c0f1b6a831c399e269772661 としましょう。
で、次のようなテーブルがあるとしましょう。
md5の値 | 著者 | 執筆日 |
1ac175b9c0f1b6a831c399e269772661 | KJ | 2005年2月1日 |
$key = md5("長い文章");
として、
select * from テーブル where id = '$key';
のようにすれば、文章から他の情報を引き出すことが出来るようになります。
文章以外に他のIDを持つ必要もありません。
応用範囲が非常に広い関数なので覚えておいて損はないでしょう。
私も頻繁に使っています。
スポンサードリンク
もどる