Java Mac

时间:2020-01-09 10:35:54  来源:igfitidea点击:

Java Mac(javax.crypto.Mac类可以从二进制数据创建消息身份验证代码(MAC)。MAC是已通过密钥加密的消息摘要。只有拥有密钥后,我们才能验证MAC。

创建Mac实例

必须先创建一个Mac实例,然后才能使用Java Mac类。使用getInstance()方法可以创建一个Mac实例。这是一个JavaMac实例化示例:

Mac mac = Mac.getInstance("HmacSHA256");

传递给Mac的getInstance()方法的String参数包含要使用的MAC算法的名称。在这种情况下,MAC算法为" HmacSHA256"。

初始化Mac

创建完成后,必须初始化JavaMac实例。我们可以通过调用Mac实例的init()方法来初始化Mac实例,该方法将Mac实例要使用的密钥作为参数传递。这是一个JavaMac初始化示例:

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);

Mac的init()方法采用一个Key实例。在这个例子中,使用了一个" SecretKeySpec",它实现了" Key"接口。

计算MAC

初始化JavaMac实例后,我们就可以开始使用它计算MAC值了。要计算MAC值,请调用Mac的update()或者doFinal()方法。如果只有一个数据块可为其计算MAC,则可以直接调用doFinal(),如下所示:

byte[] data  = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8");
byte[] macBytes = mac.doFinal(data);

如果我们有多个数据块来计算其MAC,例如如果我们正在逐块读取文件,则必须在每个块中调用update()方法,并以对doFinal()的调用结束。这是一个例子:

byte[] data  = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8");
byte[] data2 = "0123456789".getBytes("UTF-8");

mac.update(data);
mac.update(data2);

byte[] macBytes = mac.doFinal();