MD5のハッシュ値計算を関数md5()を使わずに、phpで1から実装してみた。phpでビット演算なんてするもんじゃないな…。

MD5のハッシュ値計算を関数md5()を使わずに、phpで1から実装してみた。phpでビット演算なんてするもんじゃないな…。

この頃、パスワードとかでハッシュ値を使う事が多かったので、ハッシュ値の原理を理解するためにも自力で実装してみたくなった。
データを大きな素数で割るって説明はよく見るけど、それだとハッシュ値が固定(128ビット=16バイト)なのもよく分からんし…。

参考URL
https://ja.wikipedia.org/wiki/MD5
http://bkclass.web.fc2.com/doc_md5.html

を見ながら、模擬コードをPHPに落とし込む。
最初は大変だから、空文字(“”)固定で算出してみた。
マジカルナンバー(ビットシフトする数)が出てきて、何故この数字を使うんだ!?
※雪崩効果(入力が1bitでも変わったら、ハッシュが平均で半分以上変わる)を最大にするためのビットシフト数らしい。どうやって求めたんだ?
この処理をすると、なぜハッシュ値が偏らない(クラスタ化しない)のかは不明のままだけど、とりあえずPHPで実装出来たので満足!