日々常々

ふつうのプログラマがあたりまえにしたいこと。

GroovyでMD5をやってみる


Ustで見てました。そしたら。

「総当りしろ」って言われたので。
JavaMD5java.security.MessageDigest を使うみたいです。で、書いてみた。

def getMD5(String value) {
    java.security.MessageDigest.getInstance('MD5').with{
        new BigInteger(1, digest(value.bytes)).toString(16).padLeft(32,'0')
    }
}

(0..10000).find {
    'f1d1d471045542b64f3fff665b42035a' == getMD5(it.toString())
}

…無いってさorz

4567 らしいけど、やらせてみたら 6562c5c1f33db6e05a082a88cddab5ea とか全然違うのになったー…。なんか根本的に間違ってるのかな…

あ。

println getMD5('''4567
''') 
 
f1d1d471045542b64f3fff665b42035a

改行かー!

それ1行で

groovy:000> (0..10000).find{value-> java.security.MessageDigest.getInstance('MD5').with{'f1d1d471045542b64f3fff665b42035a' == new BigInteger(1, digest((value.toString()+'\n').bytes)).toString(16).padLeft(32,'0')}}
===> 4567

「読みやすい1行」でないとなーと思うんです。訓練って事でひとつ…。