哈Ha! 我向您介绍了Jakob Jenkov撰写的第三篇文章“ Java MessageDigest”的译文,该文章来自于一系列初学者 ,他们希望学习Java密码学的基础知识。
目录:
- 密码学
- 密码
- 留言摘要
- Mac电脑
- 签章
- 密钥对
- 密钥生成器
- 密钥对生成器
- 密钥库
- 按键工具
- 证明书
- 证书工厂
- 证书路径
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();