Java-cryptography-message-digest

提供:Dev Guides
移動先:案内検索

Java暗号化-メッセージダイジェスト

ハッシュ関数は非常に便利であり、ほとんどすべての情報セキュリティアプリケーションで使用されています。

ハッシュ関数は、数値入力値を別の圧縮数値に変換する数学関数です。 ハッシュ関数への入力は任意の長さですが、出力は常に固定長です。

ハッシュ関数によって返される値は、*メッセージダイジェスト*または単に*ハッシュ値*と呼ばれます。 次の図は、ハッシュ関数を示しています。

メッセージダイジェスト

Javaは、パッケージjava.securityに属する MessageDigest という名前のクラスを提供します。 このクラスは、任意の長さのメッセージをメッセージダイジェストに変換するSHA-1、SHA 256、MD5アルゴリズムなどのアルゴリズムをサポートします。

指定されたメッセージをメッセージダイジェストに変換するには、以下の手順に従ってください-

ステップ1:MessageDigestオブジェクトを作成する

MessageDigestクラスは、* getInstance()*という名前のメソッドを提供します。 このメソッドは、使用されるアルゴリズムの名前を指定するString変数を受け入れ、指定されたアルゴリズムを実装するMessageDigestオブジェクトを返します。

以下に示すように、* getInstance()*メソッドを使用してMessageDigestオブジェクトを作成します。

MessageDigest md = MessageDigest.getInstance("SHA-256");

ステップ2:作成されたMessageDigestオブジェクトにデータを渡す

メッセージダイジェストオブジェクトを作成した後、メッセージ/データをそれに渡す必要があります。 MessageDigest クラスの* update()*メソッドを使用してこれを行うことができます。このメソッドは、メッセージを表すバイト配列を受け入れ、上記で作成したMessageDigestオブジェクトに追加/渡します。

md.update(msg.getBytes());

ステップ3:メッセージダイジェストを生成する

MessageDigestクラスの* digest()*メソッドを使用してメッセージダイジェストを生成できます。このメソッドは、現在のオブジェクトのハッシュ関数を計算し、バイト配列の形式でメッセージダイジェストを返します。

ダイジェストメソッドを使用してメッセージダイジェストを生成します。

byte[] digest = md.digest();

以下は、ファイルからデータを読み取り、メッセージダイジェストを生成して印刷する例です。

import java.security.MessageDigest;
import java.util.Scanner;

public class MessageDigestExample {
   public static void main(String args[]) throws Exception{
     //Reading data from user
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter the message");
      String message = sc.nextLine();

     //Creating the MessageDigest object
      MessageDigest md = MessageDigest.getInstance("SHA-256");

     //Passing data to the created MessageDigest Object
      md.update(message.getBytes());

     //Compute the message digest
      byte[] digest = md.digest();
      System.out.println(digest);

     //Converting the byte array in to HexString format
      StringBuffer hexString = new StringBuffer();

      for (int i = 0;i<digest.length;i++) {
         hexString.append(Integer.toHexString(0xFF & digest[i]));
      }
      System.out.println("Hex format : " + hexString.toString());
   }
}

出力

上記のプログラムは、次の出力を生成します-

Enter the message
Hello how are you
[B@55f96302
Hex format: 2953d33828c395aebe8225236ba4e23fa75e6f13bd881b9056a3295cbd64d3