MD5 クラッキング

とりあえず何でもハッシュにしておけば安全、は間違いです。
CRC32 等、ハッシュアルゴリズムとソースデータの性質によっては衝突する可能性が高くなりますし、ハッシュにすると、ハッシュ自体が表現できる範囲を超えた数を検査すると必ず重複します(CRC32 なら 32ビット, MD5 なら128ビット)。
また、いくら不可逆とはいえ、元のデータが簡単に類推できるものなら総当たりで調べる事が可能(*1)です。
たとえば単純に現在時刻のタイムスタンプ(や精度が十分に高くない乱数)からのハッシュ、ユーザのインプットなど、外部に判明している値からのハッシュ、アルファベット1文字や単純な繰り返しからのハッシュは推測されやすく安全とはいえません。
さらに、類推ができなくても元データの表現している範囲が狭いのであれば衝突の確率も高くなります。また、MD5 には元データさえわかれば、全く同じハッシュを持ちつつ、元のデータを改ざんできる脆弱性がある事も判明(*2)しています。
 
とはいえ、以上の性質を理解した上で、一時的な値として利用する分にはハッシュというのは価値の高いものだと
 
 *1:
XMD5.org
Project MD5 RainbowCrack
  メモリ消費を犠牲に処理速度を向上する技法を使ったMD5 の総当たりチェックプログラム. Windows 版もあります。
  8 文字までの半角英数字文字列であれば数分で解読できるとのこと。
  少し前までオンラインでも試せましたが、現在はオンライン版は公開終了しているようです。
 
 *2: 非公開なデータ(一部、あるいは全て)が十分に長くなるようにし、かつハッシュ値の有効期間も限定するなど、制限を設ける等回避方法もあります。あるいは(今のところ)安全な SHA-256 を使うのも方法です。
SHA-0、MD5、 MD4にコリジョン発見、reduced SHA-1も(/.j)
MD4/MD5 コリジョンの実証コードが公開(/.j)
RFC4270 インターネットプロトコルにおける暗号技術的ハッシュ関数についての攻撃