Java中的密码学。 类MessageDigest

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


目录:


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

Java MessageDigest


Java类MessageDigest表示一种加密哈希函数,可以从二进制数据计算消息摘要。 当您收到一组加密数据时,您不能确定在传输过程中没有更改过这些数据。 消息摘要有助于解决此问题。


为了确定加密数据在传输过程中是否被修改,发送者必须从数据中计算出消息摘要,并将其与数据一起发送。 接收加密数据和消息摘要的另一端可以从数据重新计算消息摘要,并检查计算出的消息摘要是否与随数据接收的消息摘要匹配。 如果两个消息摘要匹配,则有可能在传输期间未更改加密数据。


为了使消息摘要用作更改检测机制,必须满足几个条件。 但是,确切的条件是本文未讨论的密码学理论的一部分,而仅解释了如何使用Java来接收MessageDigest类中的消息摘要。


创建MessageDigest的实例


要实例化MessageDigest类,将调用MessageDigest类的静态getInstance()方法。 这是创建MessageDigest实例的示例:


MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); 

传递给getInstance()方法的字符串参数确定用于特定消息的摘要算法。


消息摘要算法


Java密码学API支持以下消息摘要算法(外部密码提供程序可以支持更多):


  • MD2
  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

并非所有这些算法都同样安全。 在撰写本文时,建议您使用SHA-256或更高版本以获得最高级别的安全性。


邮件摘要计算


通过创建MessageDigest实例,可以使用它来计算消息摘要。 如果您有一个用于计算消息摘要的数据块,请使用digest()方法。 这是从单个数据块进行消息摘要计算的结果:


 byte[] data1 = "0123456789".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] digest = messageDigest.digest(data1); 

如果同一消息摘要中要包含多个数据块,请调用update()方法并以对摘要()的调用结束。 这是从多个数据块进行消息摘要计算的样子:


 byte[] data1 = "0123456789".getBytes("UTF-8"); byte[] data2 = "abcdefghijklmnopqrstuvxyz".getBytes("UTF-8"); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest.update(data1); messageDigest.update(data2); byte[] digest = messageDigest.digest(); 

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


All Articles