Java Mac
Jakob Jenkov |
The Java Mac (javax.crypto.Mac
class can create a Message Authentication Code (MAC) from binary data. A MAC is a
message digest which has been encrypted with a secret key. Only if you have the
secret key can you verify the MAC.
Creating a Mac Instance
Before you can use the Java Mac
class you must create a Mac
instance. Creating a
Mac
instance is done using the getInstance()
method. Here is a
Java Mac
instantiation example:
Mac mac = Mac.getInstance("HmacSHA256");
The String parameter passed to the Mac
getInstance()
method contains the name of
the MAC algorithm to use. In this case the MAC algorithm is HmacSHA256
.
Initializing the Mac
Once created, the Java Mac
instance must be initialized. You initialize the Mac
instance by calling its init()
method passing as parameter the secret key to be used by
the Mac
instance. Here is a Java Mac
initialization example:
byte[] keyBytes = new byte[]{0,1,2,3,4,5,6,7,8 ,9,10,11,12,13,14,15}; String algorithm = "RawBytes"; SecretKeySpec key = new SecretKeySpec(keyBytes, algorithm); mac.init(key);
The Mac
init()
method takes a Key
instance. In this example a SecretKeySpec
is used which implements the Key
interface.
Calculating the MAC
Once the Java Mac
instance is initialized you can start calculating MAC values with it. To calculate
a MAC value you call the Mac
update()
or doFinal()
method. If you only
have a single block of data to calculate the MAC for, you can call doFinal()
directly, like this:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] macBytes = mac.doFinal(data);
If you have multiple blocks of data to calculate the MAC for, e.g. if you are reading a file block by block,
then you must call the update()
method with each block, and finish with a call to doFinal()
.
Here is an example:
byte[] data = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); byte[] data2 = "0123456789".getBytes("UTF-8"); mac.update(data); mac.update(data2); byte[] macBytes = mac.doFinal();
Tweet | |
Jakob Jenkov |