MD5とは?
MD5(エムディーファイブ、Message Digest Algorithm 5)とは、与えられた入力に対して128ビットのハッシュ値を出力するハッシュ関数である。MD5のハッシュキーの長さは、2128(約 3.403×1038 = 340澗(かん) = 340京の1京倍)通りのハッシュ値をとり、IPv6のアドレス空間と同じである。
(Wikipediaより)
何に使うか?
次の用途によく利用される(Wikipediaより)。
- MD5は、電子署名を必要とするアプリケーション向けに開発された。
- ファイルを転送する際にそのファイルが破損していないことを確認するためにも用いられる。
- またファイルが改竄されていないことを証明するためにも用いられる。
今回はあるデータが一致しているかどうかを判定するために利用する。
sqliteでは各データのカラムにunique制約をかけることで指定したカラムの値が重複するようなデータを保存しないことが可能である。
しかし、unique制約をかけられるカラムが存在しない場合の対策として利用。
次のの特徴から、データの一致性判定が容易にできると考えられるので使用。
- MD5のハッシュ値の空間が広い
- 文字列が同一であればハッシュ値が同じ
プログラム例 (ruby)
require 'digest/md5'
puts Digest::MD5.hexdigest('abc')
# => 900150983cd24fb0d6963f7d28e17f72
puts Digest::MD5.hexdigest('tdrk')
# => 2a3003a2073cde3ab79f53082b5ef204
この出力は毎回変わらないため、このハッシュ値を新たなカラムとして考え、このカラムにunique制約をかけることでデータの重複を防ぐ。