Help us understand the problem. What is going on with this article?

MD5によるデータの一致・不一致判定

More than 5 years have passed since last update.

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制約をかけることでデータの重複を防ぐ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away