文字列のハッシュを計算する
Rubyではdigestライブラリを使ってMD5やSHA-1のハッシュを求めることができる。
以下はMD5のハッシュを求める例である。
require 'digest/md5' p Digest::MD5.digest("hoge") #=> "\xEAp>z\xA1\xEF\xDA\x00d\xEA\xA5\a\xD9\xE8\xAB~"
ハッシュを16進数の文字列で得るにはhexdigest
メソッドを使う。
require 'digest/md5' p Digest::MD5.hexdigest("hoge") => "ea703e7aa1efda0064eaa507d9e8ab7e"
巨大なファイルを部分的に読み込みながらハッシュを求める場合など、一度に文字列の全体が得られない時には、いったんダイジェストのインスタンスを生成し、update
メソッドで徐々にハッシュを計算することができる。この場合もハッシュの取得にはdigest
またはhexdigest
メソッドを用いる。
以下は標準入力を徐々に読み込んでMD5ハッシュを計算する例である。
require 'digest/md5' md5 = Digest::MD5.new while s = $stdin.read(1024) md5.update(s) end puts md5.hexdigest
以下にdigestライブラリの一覧を示す。どのライブラリも使い方はMD5と同じである。
ライブラリ | クラス |
digest/md5 | Digest::MD5 |
digest/rmd160 | Digest::RMD160 |
digest/sha1 | Digest::SHA1 |
digest/sha2 | Digest::SHA256 Digest::SHA384 Digest::SHA512 |