Java

Javaでハッシュ値(SHA1/SHA2/SHA3/MD5)を生成する

2020年5月1日

Java標準のMessageDigestクラスを使用する方法

Javaでハッシュ値を生成するには、Java標準機能であるMessageDigestクラスを使用することで生成することができます。

スポンサーリンク

MD5のハッシュ値を生成

MD5とは、Message Digest 5の略で128ビット(16進数では32桁)のハッシュ値を生成するハッシュ関数です。MD5は脆弱性が見つかっている古いハッシュ関数のため、セキュリティ用途での使用は推奨されていません。

MessageDigestクラスでMD5のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// MD5
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] md5_result = md5.digest("テスト1".getBytes());
System.out.println("MD5:" + String.format("%020x", new BigInteger(1, md5_result)));

【実行結果】

MD5:afbef4a1737bed2e6e080a03b4b04cb4

SHA-1のハッシュ値を生成

SHA-1とは Secure Hash Algorithm 1の略で160ビット(16進数では40桁)のハッシュ値を生成するハッシュ関数です。SHA-1は脆弱性が見つかっている古いハッシュ関数のため、セキュリティ用途での使用は推奨されていません。

MessageDigestクラスでSHA-1のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// SHA-1
MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
byte[] sha1_result = sha1.digest("テスト1".getBytes());
System.out.println("SHA-1:" + String.format("%040x", new BigInteger(1, sha1_result)));

【実行結果】

SHA-1:39bc6e92abd2f88886fa17ea3e78005fcf7e504f

SHA-2のハッシュ値を生成

SHA-2とは Secure Hash Algorithm 2の略で、前規格であるSHA-1(Secure Hash Algorighm 1)から多くの改良が加えられたバージョンです。

SHA-2は、SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256の6つのバリエーションを持ち、ハッシュ長(ハッシュ値の長さ)は224、256、384、512ビットのいずれかです。

最長のSHA-512が最も安全性が高く、一般的にはSHA-256がよく利用されています。

SHA-256のハッシュ値を生成

MessageDigestクラスでSHA-256のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// SHA-256(SHA-2)
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
byte[] sha256_result = sha256.digest("テスト1".getBytes());
System.out.println("SHA-256:" + String.format("%040x", new BigInteger(1, sha256_result)));

【実行結果】

SHA-256:a67c188a9382e4f44f16c686335832d1d0253dd0b44ac0e4aed4dcf53c285b13

SHA-512のハッシュ値を生成

MessageDigestクラスでSHA-512のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// SHA-512(SHA-2)
MessageDigest sha512 = MessageDigest.getInstance("SHA-512");
byte[] sha512_result = sha512.digest("テスト1".getBytes());
System.out.println("SHA-512:" + String.format("%040x", new BigInteger(1, sha512_result)));

【実行結果】

SHA-512:5741dc133671babcd79ba9ac6f42e6e423c896af7f0ebc393d0075aa95da1264efe25344b62023368aa968db45ed6cd5aa20a8f67252870d9e37db2515bf5427

SHA-3のハッシュ値を生成

SHA-3とは Secure Hash Algorithm 3の略で、2015年8月5日に正式版が公表された最新のハッシュ関数です。SHA-3の関数は固定長を出力する224、256、384、512と 可変長出力のSHAKE128 およびSHAKE256が存在しています。

SHA3-256のハッシュ値を生成

MessageDigestクラスでSHA3-256のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// SHA3-256(SHA-3)
MessageDigest sha3_256 = MessageDigest.getInstance("SHA3-256");
byte[] sha3_256_result = sha3_256.digest("テスト1".getBytes());
System.out.println("SHA3-256:" + String.format("%040x", new BigInteger(1, sha3_256_result)));

【実行結果】

SHA3-256:59d6808fe288df1d428cc1b61c55d79e43d9ad4f26a3a23e0772f7243efc99e4

SHA3-512のハッシュ値を生成

MessageDigestクラスでSHA3-512のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// SHA3-512(SHA-3)
MessageDigest sha3_512 = MessageDigest.getInstance("SHA3-512");
byte[] sha3_512_result = sha3_512.digest("テスト1".getBytes());
System.out.println("SHA3-512:" + String.format("%040x", new BigInteger(1, sha3_512_result)));

【実行結果】

SHA3-512:6596b23258d166b0dcd83a77788b83bf2fd3a82b2a1303072865c4eb24d8103402ff720f4b8c9046b686542cbe851bc470e355a40fec72118515e981bdd6f930

外部ライブラリのDigestUtilsクラスを使用する方法

Javaでハッシュ値を生成するには、外部ライブラリである「Apache Commons Codec」のDigestUtilsクラスを使用することで生成することもできます。

スポンサーリンク

MD5のハッシュ値を生成

「Apache Commons Codec」のDigestUtilsクラスでMD5のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// MD5
String md5 = DigestUtils.md5Hex( "テスト1" );
System.out.println("MD5:" + md5);

【実行結果】

MD5:afbef4a1737bed2e6e080a03b4b04cb4

SHA-1のハッシュ値を生成

「Apache Commons Codec」のDigestUtilsクラスでSHA-1のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// SHA-1
String sha1 = DigestUtils.sha1Hex( "テスト1" );
System.out.println("SHA-1:" + sha1);

【実行結果】

SHA-1:39bc6e92abd2f88886fa17ea3e78005fcf7e504f

SHA-2のハッシュ値を生成

SHA-256のハッシュ値を生成

「Apache Commons Codec」のDigestUtilsクラスでSHA-256のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// SHA-256(SHA-2)
String sha256 = DigestUtils.sha256Hex( "テスト1" );
System.out.println("SHA-256:" + sha256);

【実行結果】

SHA-256:a67c188a9382e4f44f16c686335832d1d0253dd0b44ac0e4aed4dcf53c285b13

SHA-512のハッシュ値を生成

「Apache Commons Codec」のDigestUtilsクラスでSHA-512のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// SHA-512(SHA-2)
String sha512 = DigestUtils.sha512Hex( "テスト1" );
System.out.println("SHA-512:" + sha512);

【実行結果】

SHA-512:5741dc133671babcd79ba9ac6f42e6e423c896af7f0ebc393d0075aa95da1264efe25344b62023368aa968db45ed6cd5aa20a8f67252870d9e37db2515bf5427

SHA-3のハッシュ値を生成

SHA3-256のハッシュ値を生成

「Apache Commons Codec」のDigestUtilsクラスでSHA3-256のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// SHA3-256(SHA-3)
String sha3_256 = DigestUtils.sha3_256Hex( "テスト1" );
System.out.println("SHA3-256:" + sha3_256);

【実行結果】

SHA3-256:59d6808fe288df1d428cc1b61c55d79e43d9ad4f26a3a23e0772f7243efc99e4

SHA3-512のハッシュ値を生成

「Apache Commons Codec」のDigestUtilsクラスでSHA3-512のハッシュ値を生成する実装例と実行結果は次の通りです。

【実装例】

// SHA3-512(SHA-3)
String sha3_512 = DigestUtils.sha3_512Hex( "テスト1" );
System.out.println("SHA3-256:" + sha3_512);

【実行結果】

SHA3-512:6596b23258d166b0dcd83a77788b83bf2fd3a82b2a1303072865c4eb24d8103402ff720f4b8c9046b686542cbe851bc470e355a40fec72118515e981bdd6f930

helpful