Java-cryptography-creating-mac

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

Java暗号化-MACの作成

MAC(* M essage A uthentication C * ode)アルゴリズムは、メッセージ認証を提供する対称キー暗号化技術です。 MACプロセスを確立するために、送信者と受信者は対称キーKを共有します。

基本的に、MACはメッセージ認証を保証するためにメッセージとともに送信される、基になるメッセージで生成される暗号化されたチェックサムです。

認証にMACを使用するプロセスは、次の図に示されています-

MACの作成

Javaでは、 javax.crypto パッケージの Mac クラスがメッセージ認証コードの機能を提供します。 以下の手順に従って、このクラスを使用してメッセージ認証コードを作成します。

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

*KeyGenerator* クラスは、必要なキー生成アルゴリズムを表すString変数を受け入れ、秘密キーを生成する *KeyGenerator* オブジェクトを返す* getInstance()*メソッドを提供します。

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

//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");

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

*java.Security* パッケージの *SecureRandom* クラスは、Javaで乱数を生成するために使用される強力な乱数ジェネレーターを提供します。 以下に示すように、このクラスをインスタンス化します。
//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();

ステップ3:KeyGeneratorを初期化する

*KeyGenerator* クラスは* init()*という名前のメソッドを提供します。このメソッドは *SecureRandom* オブジェクトを受け入れ、現在の *KeyGenerator* を初期化します。

このメソッドを使用して、前の手順で作成したKeyGeneratorオブジェクトを初期化します。

//Initializing the KeyGenerator
keyGen.init(secRandom);

ステップ4:キーを生成する

以下に示すように、 KeyGenerator クラスの* generateKey()*メソッドを使用してキーを生成します。

//Creating/Generating a key
Key key = keyGen.generateKey();

ステップ5:Macオブジェクトを初期化する

Macクラスの* init()*メソッドはKeyオブジェクトを受け入れ、指定されたキーを使用して現在のMacオブジェクトを初期化します。

//Initializing the Mac object
mac.init(key);

ステップ6:Mac操作を完了する

Macクラスの* doFinal()*メソッドは、Mac操作を終了するために使用されます。 バイト配列の形式で必要なデータをこのメソッドに渡し、以下に示すように操作を完了します。

//Computing the Mac
String msg = new String("Hi how are you");
byte[] bytes = msg.getBytes();
byte[] macResult = mac.doFinal(bytes);

次の例は、JCAを使用したメッセージ認証コード(MAC)の生成を示しています。 ここでは、「こんにちは、お元気ですか」という簡単なメッセージを受け取り、そのメッセージ用のMacを生成します。

import java.security.Key;
import java.security.SecureRandom;

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;

public class MacSample {
   public static void main(String args[]) throws Exception{
     //Creating a KeyGenerator object
      KeyGenerator keyGen = KeyGenerator.getInstance("DES");

     //Creating a SecureRandom object
      SecureRandom secRandom = new SecureRandom();

     //Initializing the KeyGenerator
      keyGen.init(secRandom);

     //Creating/Generating a key
      Key key = keyGen.generateKey();

     //Creating a Mac object
      Mac mac = Mac.getInstance("HmacSHA256");

     //Initializing the Mac object
      mac.init(key);

     //Computing the Mac
      String msg = new String("Hi how are you");
      byte[] bytes = msg.getBytes();
      byte[] macResult = mac.doFinal(bytes);

      System.out.println("Mac result:");
      System.out.println(new String(macResult));
   }
}

出力

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

Mac result:
HÖ„^ǃÎ_Utbh…?š_üzØSSÜh_ž_œa0ŽV?