Java中的密码学。 Mac类

哈Ha! 我向您介绍了Jakob Jenkov撰写的第四篇文章“ Java Mac”的译文,该文章来自于一系列初学者 ,他们希望学习Java密码学的基础知识。


目录:


  1. Java密码学
  2. Java密码
  3. 留言摘要
  4. Mac电脑
  5. 签章
  6. 密钥对
  7. 密钥生成器
  8. 密钥对生成器
  9. 密钥库
  10. 按键工具
  11. 证明书
  12. 证书工厂
  13. 证书路径

消息验证码(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(); 

Source: https://habr.com/ru/post/zh-CN445228/


All Articles