ひらい ぶらり Hi-Library

ぷろぐらみんぐについて。ときどきどうでもいいことについて。

Android で MD5とかSHA-256とかするのにcommons-codec使おうとしたらエラーが出た話

MD5やらSHA-256でハッシュ化したい機会ってのはよくあると思うんですが、ググるとなんでかMessageDigestクラス使って長々と記述するサンプルが多く見かける気がします。 ラップしたクラスを作ってもいいんですが、せっかくだから俺はcommons-codec使うぜ!

gradleに追記

compile 'commons-codec:commons-codec:1.10'

コード

String hash = DigestUtils.sha256hex("abc");

うんうん短くてよきかなよきかな

Could not find method org.apache.commons.codec.binary.Hex.encodeHexString, referenced from method org.apache.commons.codec.digest.DigestUtils.sha256Hex

そんな気はしてた。 どうやらDigestUtilsが内部で使ってるHex.encodeHexStringが無いということらしい。どういうことなの。 試しに名前空間を変えて、org.apache.commons.codec.binary.Hexの中身をまるっとコピーして実行するとうまくいった。多分android SDK が内部的にcommons-codec使ってて、そっちにあるHexが呼ばれているっぽい。Google Playアプリのライセンスの中にもcommons-codecってあるし多分そういうことなのだろう。 とりあえず、encodeHexStringが使われないようにしてお茶を濁そう。

String hash = new String(Hex.encodeHex(DigestUtils.sha256("abc"));

敗北感ある・・・(´・ω:;.:...