【Java】ハッシュで暗号化する

■ はじめに

Java の ハッシュについて、メモ。

目次

【1】ハッシュ
【2】MessageDigest・API仕様
【3】サンプル

【1】ハッシュ

* 以下の関連記事を参照のこと

ハッシュ / Hash
https://dk521123.hatenablog.com/entry/2022/09/14/000000

【2】MessageDigest・API仕様

API仕様
http://docs.oracle.com/javase/jp/7/api/java/security/MessageDigest.html
アルゴリズム種類
http://docs.oracle.com/javase/jp/7/technotes/guides/security/StandardNames.html#MessageDigest

【3】サンプル

CipherHelper.java : ハッシュ値取得クラス

import java.security.MessageDigest;

public class CipherHelper {

   public enum HashAlgorithm {
      MD2("MD2"),
      MD5("MD5"),
      SHA1("SHA-1"),
      SHA256("SHA-256"),
      SHA384("SHA-384"),
      SHA512("SHA-512");

      private String value;

      private HashAlgorithm(String value) {
         this.value = value;
      }

      public String toString() {
         return this.value;
      }
   }

   public static String getHash(String value, HashAlgorithm hashAlgorithm) {
      String returnValue = null;
      try {
         MessageDigest messageDigest = 
               MessageDigest.getInstance(hashAlgorithm.toString());
         messageDigest.update(value.getBytes());
         byte[] hashValues = messageDigest.digest();
         returnValue = DatatypeConverter.printHexBinary(hashValues);
      } catch (Exception ex) {
         ex.printStackTrace();
      }
      return returnValue;
   }
}

Main.java : 使う側

public class Main {
   public static void main(String[] args) {
      try {
         String targetValue = "Hellow World!!";

        System.out.println("Length : 123456789|123456789|123456789|123456789|123456789+123456789|123456789|123456789|123456789|123456789+123456789|123456789|123456789|123456789|123456789+");
        String hashByMD2 = 
              CipherHelper.getHash(targetValue, HashAlgorithm.MD2);
        System.out.println("MD2    : " + hashByMD2);
        
        String hashByMD5 = 
              CipherHelper.getHash(targetValue, HashAlgorithm.MD5);
        System.out.println("MD5    : " + hashByMD5);
        
        String hashBySHA1 = 
              CipherHelper.getHash(targetValue, HashAlgorithm.SHA1);
        System.out.println("SHA1   : " + hashBySHA1);
        
        String hashBySHA256 = 
              CipherHelper.getHash(targetValue, HashAlgorithm.SHA256);
        System.out.println("SHA256 : " + hashBySHA256);
        
        String hashBySHA384 = 
              CipherHelper.getHash(targetValue, HashAlgorithm.SHA384);
        System.out.println("SHA384 : " + hashBySHA384);
        
        String hashBySHA512 = 
              CipherHelper.getHash(targetValue, HashAlgorithm.SHA512);
        System.out.println("SHA512 : " + hashBySHA512);
         
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

出力結果

複雑なアルゴリズムになればなるほど、文字列が長くなる?

Length : 123456789|123456789|123456789|123456789|123456789+123456789|123456789|123456789|123456789|123456789+123456789|123456789|123456789|123456789|123456789+
MD2    : 752a4aa38b4f6d6401a7658890deba62
MD5    : 22a9f348cff599ff7c2a5caa8f4782fd
SHA1   : 94bcd8d0e86d4d6f0517c9e80c82b47dc6fe3707
SHA256 : baa04877dbe56a3941a46869982bb67e641bff08dcb7dbf7a7734421a2ecd3c9
SHA384 : 8c42ffdaa91d995a2214d7a22579c8b4c5b3b38968dc8fb4bfd80cbd8a8f1c342a27c1d86f93d1226c52e06219c4b2f3
SHA512 : a02eb48856dfc85e3875ab19c7f5b3c3e5f38f12fc480e5e7352e77bf96655fa48667d374f6c6caeee34cfece55bc4bad944c9e2d9fdd0d88f90b2955e022bb0

参考文献

http://itmemo.net-luck.com/java-messagedigest-hash/
http://www.websec-room.com/2013/02/27/238

関連記事

ハッシュ / Hash
https://dk521123.hatenablog.com/entry/2022/09/14/000000