Javaでハッシュ値(メッセージ・ダイジェスト)の生成を行い、暗号化する(SHA1,SHA256,MD5)


 

暗号化のために、文字列からハッシュダイジェスト値を生成するというのをよくやります。

大きくは2つの方法があるので、両方記載しておきますね。

 

  • 「Apache Commons Codec」のDigestUtilsを使う方法
  • Java標準のjava.security.MessageDigestを使う方法

 

簡単かつ、すっきりしているのはDigestUtilsを使う方法ですが、これだけのために「Apache Commons Codec」を使うのもちょっとな・・というときもあるので。

 

「Apache Commons Codec」のDigestUtilsを使う方法

DigestUtilsは「Apache Commons Codec」のクラスで、SHA-1など暗号化方式に基づいた、16進数文字列を返してくれるユーティリティです。使い方はすごく簡単で、

のようにハッシュ化したい文字列を渡すだけ。

同様に、SHA-256やMD5も以下のようなメソッドを使えます。

 

Java標準のjava.security.MessageDigestを使う方法

もう一つの方法はJava標準のMessageDigestクラスを使います。

このメソッドのダイジェスト値も戻りはbyte[]型なので、16進数の文字列に変換するには、少しテクニックが必要になります。

というのも、byte値によって負値を補正したり、0埋めする必要があるためです。まとめて行うには「String.format」と、大きな数字を扱うBigIntegerクラスを使ったテクニックが使えます。

“%040x”を使うのがミソですね。

 

実は、「Apache Commons Codec」の「org.apache.commons.codec.binary.Hex」クラスを使うと

のようにも書けますが、だったら、最初っから「Apache Commons Codec」使えばいいじゃん。。っていうことで。

 

さらに追記(Java標準でやる場合)

実は、javaの標準クラスのjavax.xml.bind.DatatypeConverterで以下のようにしてもハッシュ値を生成することはできます。

ただ、生成された値は、「57F40DEB66EAF5C887X98F992DB3EC12A37B222A」のように全部大文字になります。

小文字の方がよいという場合もあると思うので、場合によって使い分けることをお勧めします。

 

コピペで使えるJavaソース

上記の2つの方法でハッシュ値を求めるソースを貼っておきます。

 

 

実行結果は、こんな感じ。どちらも同じ値が導き出されていることが分かりますね。

実行結果

 

こんな記事も読まれています


コメントを残す

サブコンテンツ

このページの先頭へ