Skip to content

Scala と Ruby でメッセージダイジェスト(ハッシュ値)を生成する

Posted on:2010年8月25日 at 23:45

Ruby だと、

>> require 'digest/md5'
true
>> Digest::MD5.new.update('hoge')
#<Digest::MD5: ea703e7aa1efda0064eaa507d9e8ab7e>

流石 Ruby、人に優しい。。

Scala だと Java の API (java.security.MessageDigest) を使って生成することになる。ちょっと長くなるが、Java でやるよりは、断然楽。

scala> import java.security.MessageDigest
import java.security.MessageDigest

scala> val digestedBytes = MessageDigest.getInstance("MD5").digest("hoge".getBytes)
digestedBytes: Array[Byte] = Array(-22, 112, 62, 122, -95, -17, -38, 0, 100, -22, -91, 7, -39, -24, -85, 126)

scala> digestedBytes.map("%02x".format(_)).mkString
res49: String = ea703e7aa1efda0064eaa507d9e8ab7e

MessageDigest のインスタンスを MD5 で生成し、MessageDigest#digest にハッシュ化したい文字列のバイト配列を渡してダイジェストを生成する。

結果値はバイトの配列なので、16 進数文字列に変換してあげる。

Ruby、Scala ともに、ea703e7aa1efda0064eaa507d9e8ab7e のメッセージダイジェスト(ハッシュ値)となっている。(同じなのは当然だが。。)

また、MessageDigest でどのようなアルゴリズムが使えるのかは、

scala> import java.security.Security
import java.security.Security

scala> Security.getAlgorithms("MessageDigest")
res52: java.util.Set[java.lang.String] = [SHA-256, SHA-512, SHA, SHA-384, MD5, MD2]

で確認できる。