哈Ha! 我向您介绍了Jakob Jenkov撰写的第四篇文章“ Java Mac”的译文,该文章来自于一系列初学者 ,他们希望学习Java密码学的基础知识。
目录:
- Java密码学
- Java密码
- 留言摘要
- Mac电脑
- 签章
- 密钥对
- 密钥生成器
- 密钥对生成器
- 密钥库
- 按键工具
- 证明书
- 证书工厂
- 证书路径
消息验证码(MAC)
Java Mac( javax.crypto.Mac )从二进制数据生成消息认证代码(MAC)。 MAC是使用秘密密钥加密的消息摘要 。 只有使用密钥,您才能验证MAC的真实性。
实例化
在使用Mac类之前,必须创建Mac实例。 Mac类的实例是使用getInstance()方法创建的。 这是创建Mac实例的示例:
Mac mac = Mac.getInstance("HmacSHA256");
传递给getInstance()的字符串参数包含所使用算法的名称。 在这种情况下,将使用HmacSHA256算法。
初始化
创建实例后,应初始化Mac。 通过调用init()方法初始化Mac实例,并传入将由实例用作参数的密钥。 这是初始化Mac实例的示例:
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);
init()方法接受Key的实例。 本示例使用SecretKeySpec ,它实现了Key接口。
MAC计算
使用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();