Ruby Tips!

RubyのTipsを紹介します

文字列のハッシュを計算する

Rubyではdigestライブラリを使ってMD5SHA-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