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