sha1

md5/sha1関数:ハッシュ値を計算する

使い方

$md5hash = md5( $binary );
$sha1hash = sha1( $binary );

プログラマであればMD5やSHA1ハッシュを使ったことのある方も多いのではないでしょうか。
PHPではこのMD5やSHA1ハッシュをとても簡単に、関数1つだけで計算してくれます。

使い方は何も難しくありません。
第1引数にハッシュ計算したいバイナリデータ(文字列なども可)を渡すだけです。
それだけで16進数表現のハッシュを返してくれます。
もし、16進数表現ではない生のハッシュ値を得たい場合には、第2に引数にtrueを指定すればOKです。
いやぁ、簡単簡単。もうハッシュアルゴリズムを自分でゴリゴリ実装した関数やクラスを実装する時代は終わったんですね。。。

ちなみにファイルのハッシュ計算にはmd5_file関数やsha1_file関数も用意されていてファイルパスを指定するだけです。

※ハッシュ計算にはhash関数も使えますが、引数の指定が少しだけ面倒なのでこちらの関数をご紹介しました。

注意点

よくある使い方として、パスワードをハッシュ化してハッシュ値をデータベースに保存する。
なんてことをやっている方も多いのではないかと思いますが、実はこのやり方は推奨されていません。
なぜかというと、このMD5やSHA1ハッシュは不可逆暗号化ではありますが、実は最近のPC性能では割と簡単に衝突するハッシュ値を計算することができてしまうのです。特にMD5はパスワードハッシュ計算にはあまりにも脆弱です。
そのため、2014年3月現在、PHPではこのアルゴリズムを使うのではなく、crypt関数のBlowfishアルゴリズムを推奨しています。

さらにPHP5.5ではPassword Hashingのための関数が用意されました。PHP5.5以降をお使いであれば、その中のpassword_hash関数を使ってパスワードのハッシュ化を行うようにしましょう。

password_hash関数

使いどころ

よくある使いどころとしては、送受信したデータの整合性チェックなどに使います。
特に、大きなデータや間違いの許されないデータを送受信する際には、データと別にハッシュ値(メッセージダイジェスト)を送信してそのハッシュ値が、受信したデータから計算したハッシュ値と一致するかを検証するようにしましょう。
ハッシュはいろいろなところで使われていますので、この関数の活躍の場はたくさん出てくるでしょう。

公式サイト

http://jp1.php.net/manual/ja/function.md5.php
http://jp1.php.net/manual/ja/function.md5-file.php
http://jp1.php.net/manual/ja/function.sha1.php
http://jp1.php.net/manual/ja/function.sha1-file.php