md5sumの計算

30分プログラム、その750。md5sumの計算をやってみました。
java.security.MessageDigestを使えば楽に計算できます。
ただ、InputStreamのreadにwhileを使っているのがイケてない気がしてます。InputStreamをSeq[Byte]に変換できたらクールなのになぁ。

使い方

$ scala Md5sum md5sum.scala
a4d430e5775936a87538f3260b32baef

# 参考
$ md5sum md5sum.scala
a4d430e5775936a87538f3260b32baef  md5sum.scala

ソースコード

import java.security.MessageDigest
import java.io._
object Md5sum {

  def md5sum(input : InputStream) = {
    val digest = MessageDigest.getInstance("md5")
    var byte = input.read()
    while(byte != -1) {
      digest.update( byte.toByte )
      byte = input.read()
    }
    digest.digest()
  }

  def hexdigest(xs : Seq[Byte]) =
    xs.map((n : Byte) => "%02x".format(n & 0xff)).mkString

  def main(args: Array[String]) {
    for(arg <- args)
      println(hexdigest(md5sum(new FileInputStream(arg))))
  }
}