Java ハッシュ値を取得するサンプル

Javaのハッシュ値を取得するサンプルです。

目次

サンプル ハッシュ値とは
  Apache Commons Codecの取得方法
  SHA-256のサンプル
  MD5のサンプル

ハッシュ値とは

ハッシュ値のイメージ:fdb481ea956fdb654afcc327cff9b626966b2abdabc3f3e6dbcb1667a888ed9a

このサンプルでは、Apache Commons CodecのDigestUtilsでハッシュ値を求めます。

ハッシュ値は、文字列からハッシュ値へ変換した場合、そのハッシュ値から元の文字列に戻すことはできないという特徴があります。

使用例としてWEBシステムでユーザが入力したパスワードをハッシュ値にしてDBに保存し
再度ユーザがログインした時、入力されたパスワードをハッシュ値にしてDBにあるハッシュ値と比較し確認する等あります。パスワードをDBにそのまま保存するより良くなります。

また通常はソルト(salt:塩)を使用します。ソルトとは、元のデータに任意の文字列を付加してからハッシュ値にすることでセキュリティの強度を高めます。

さらに安全性を高める場合は、ストレッチング(ハッシュ値の計算を繰り返し行う)を行います。

以下は、Apache Commons CodecのDigestUtilsクラスのリンクです。
http://commons.apache.org/proper/commons-codec/apidocs/index.html

 

Apache Commons Codecの取得方法

1.Mavenで取得する場合

pom.xmlの<dependencies>の間に以下のコードを追加します。

<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

Mavenで取得する手順は、以下を参照願います。
Eclipse Mavenでjarを取得(Java)

 

2.jarファイルで取得する場合

MavenRepositoryのサイトから直接jarファイルを取得することもできます。
https://mvnrepository.com/artifact/commons-codec/commons-codec

上記リンクから、Versionの数値をクリックして、「Files」の横にある「jar」をクリックするとjarファイルがダウンロードされます。

ダウンロード完了後、jarファイルをクラスパスに追加します。
Eclipse jarファイルをクラスパスに設定する方法

 

SHA-256のサンプル

SHA-256は、256bitのハッシュ値(64桁)を出力します。よく使用されています。256以上が推奨です。

package test1;
import org.apache.commons.codec.digest.DigestUtils;

public class Test1 {
	public static void main(String[] args) {
		
		String str1 = DigestUtils.sha256Hex( "あいうえお" );
		System.out.println(str1); 
		//fdb481ea956fdb654afcc327cff9b626966b2abdabc3f3e6dbcb1667a888ed9a
		
		String str2 = DigestUtils.sha256Hex( "あいうABC123" );
		System.out.println(str2); 
		//eac7b740f6b015b37fcf86d3c7ca404caa84d1ab4ea2d9974d4ad0d410f38b9a
	}
}

MD5のサンプル

MD5は、128bitのハッシュ値(32桁)を出力します。安全性は低いです。

package test1;
import org.apache.commons.codec.digest.DigestUtils;

public class Test1 {
	public static void main(String[] args) {
		
		String str1 = DigestUtils.md5Hex( "あいうえお" );
		System.out.println(str1); 
		//86deb27a32903da70a7b2348fcf36bc3
		
		String str2 = DigestUtils.md5Hex( "あいうABC123" );
		System.out.println(str2); 
		//5275d678c4f68d2c2ff37c25c842378e
	}
}

関連の記事

Java Base64のエンコードとデコードのサンプル

△上に戻る