Scalaで対象文字列をハッシュ化する

基本的にはJavaでハッシュをとることと同一の内容をScalaで書いているだけなのだけれども、折角なので備忘録としてメモを残します。

[scala] import java.security.MessageDigest

object CryptUtil {

def main(args:Array[String]):Unit ={

if (args.size < 1 || args(0) == ""){
  println("引数には 暗号化対象の文字列 ハッシュ回数 の二つを指定してください。")
  return
}

val times = if (args.size < 2 || args(1) == ""){
  1000
}else{
  args(1).toInt
}

printf("ハッシュ回数を%d回で処理します。n",times)

val encString = args(0)
printf("暗号化対象文字列:%sn", encString)

val cryptString = getSha(encString, times)
println(cryptString)

}

/* * ハッシュ(SHA-512)を取得します。 * @param s 取得対象の文字列 * @return 生成したハッシュ値 / def getSha(s:String):String ={ val md = MessageDigest.getInstance("SHA-512") md.digest(s.getBytes).map( & 0xFF).map(.toHexString).mkString }

/* * 指定回数ハッシュを行う * @param s ハッシュ対象文字 * @param i ハッシュ実行回数 / def getSha(s:String, i:Int):String ={ var ret:String = s for (x <- Range(1,i)){ ret = getSha(ret) } ret }

} [/scala]

使用するときはscalacでコンパイルして以下の通り実行します。

[bash] $scalac CryptUtil.scala $scala CryptUtil test 100 ハッシュ回数を100回で処理します。 暗号化対象文字列:test 7fb9befff08c5e9852e97c9a4365b5973f9e53e6631b10e9e01479b1e72e10f99ff46fbbc2d724f0abde1753a272e84286f2d781682f530fb648f1970 [/bash]

テストデータを作成するときなどにハッシュ化した文字列を用意しないといけないことは多いですが、とりあえずこれで楽に準備できるようになりそうです。