一方向性ハッシュ関数 MD5, SHA, RIPEMD160

一方向性ハッシュ関数は任意の長さのデータを固定長のビット文字列に変換することのアルゴリズム
入力を受け取ったら、不可逆的に変換して出力する一方通行のプロセス
出力から入力を復元することは不可能

アルゴリズムのうちの2つがMD5とSHA
MD5は暗号的に壊れており、衝突の原因になると考えられている
一方SHAはNIST(National Institute of Standards and Technology)が開発した暗号ハッシュ関数のファミリーをさす。SHAにはSHA256やSHA512などのバージョンがあり、全体としてMD5よりも安全性が高いとされている。

### MD5とは
MD5とはMessage-Digest Algorithmの略。128ビットのハッシュ値を生成することができる。
多くの脆弱性を引き起こしたが、データの完全性を検証するためのチェックサムとして使用することは可能
また、パーティション分割されたデータベースから特定の鍵のパーティションを見つけるなど、非暗号的なタスクにも適している

$text = "It's sunny today.";
echo md5($text);

### SHAとは
SHAとは、Secure Hash Algorithmの略。
SHA-0: 160ビットのハッシュ関数オリジナルバージョン
SHA-1: 160ビットのハッシュ関数 ※2010年以降は使用されていない
SHA-2: ブロックサイズの異なる2つの等価ハッシュ関数から構成される
SHA-256: 32ビットワード
SHA-523: 64ビットワード

$text = "It's sunny today.";
echo hash('sha256', $text);

### RIPEMD
入力データのサイズに関わらず、160ビットのハッシュ値を生成する。SHA-256より小さいためデータサイズを節約できる
データとkeyを渡す

$text = "It's sunny today.";
echo hash_hmac('ripemd160', $text, 'secret');