English 中文(简体)
Java Cryptography - Creating a MAC
  • 时间:2024-09-17

Java Cryptography - Creating a MAC


Previous Page Next Page  

MAC (Message Authentication Code) algorithm is a symmetric key cryptographic technique to provide message authentication. For estabpshing MAC process, the sender and receiver share a symmetric key K.

Essentially, a MAC is an encrypted checksum generated on the underlying message that is sent along with a message to ensure message authentication.

The process of using MAC for authentication is depicted in the following illustration −

Creating MAC

In Java the Mac class of the javax.crypto package provides the functionapty of message authentication code. Follow the steps given below to create message authentication code using this class.

Step 1: Create a KeyGenerator object

The KeyGenerator class provides getInstance() method which accepts a String variable representing the required key-generating algorithm and returns a KeyGenerator object that generates secret keys.

Create KeyGenerator object using the getInstance() method as shown below.

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

Step 2: Create SecureRandom object

The SecureRandom class of the java.Security package provides a strong random number generator which is used to generate random numbers in Java. Instantiate this class as shown below.

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

Step 3: Initiapze the KeyGenerator

The KeyGenerator class provides a method named init() this method accepts the SecureRandom object and initiapzes the current KeyGenerator.

Initiapze the KeyGenerator object created in the previous step using this method.

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

Step 4: Generate key

Generate key using generateKey() method of the KeyGenerator class as shown below.

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

Step 5: Initiapze the Mac object

The init() method of the Mac class accepts an Key object and initiapzes the current Mac object using the given key.

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

Step 6: Finish the mac operation

The doFinal() method of the Mac class is used to finish the Mac operation. Pass the required data in the form of byte array to this method and finsh the operation as shown below.

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

Example

The following example demonstrates the generation of Message Authentication Code (MAC) using JCA. Here, we take a simple message "Hi how are you" and, generate a Mac for that message.

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

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

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

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

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

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

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

      //Initiapzing 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));     
   }
}

Output

The above program will generate the following output −

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