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]
で確認できる。