Java Cryptography 简明教程
Java Cryptography - Message Digest
哈希函数非常有用,并且出现在几乎所有信息安全应用程序中。
哈希函数是一种数学函数,它将数字输入值转换成另一个压缩数字值。哈希函数的输入长度是任意的,但输出总是固定长度。
哈希函数返回的值称为 message digest 或简单称为 hash values 。下图为哈希函数的插图。
Java 提供了一个名为 MessageDigest 的类,它属于 java.security 包。此类支持算法,例如 SHA-1、SHA 256、MD5 算法,以将任意长度的消息转换为消息摘要。
要将给定的消息转换为消息摘要,请按照以下步骤操作 −
Step 1: Create a MessageDigest object
MessageDigest 类提供名为 getInstance() 的方法。此方法接受一个 String 变量,指定要使用的算法名称,并返回实现指定算法的 MessageDigest 对象。
如下所示,使用 getInstance() 方法创建 MessageDigest 对象。
MessageDigest md = MessageDigest.getInstance("SHA-256");
Step 2: Pass data to the created MessageDigest object
在创建消息摘要对象之后,你需要将消息/数据传递给它。你可以使用 MessageDigest 类的 update() 方法来做到这一点,此方法接受表示消息的字节数组,并将其添加到/传递到上面创建的 MessageDigest 对象中。
md.update(msg.getBytes());
Step 3: Generate the message digest
你可以使用 digest() 方法生成消息摘要。MessageDigest 类的方法会在当前对象上计算哈希函数,并以字节数组的形式返回消息摘要。
使用 digest 方法生成消息摘要。
byte[] digest = md.digest();
Example
以下是一个示例,它从文件中读取数据并生成消息摘要并将其打印出来。
import java.security.MessageDigest;
import java.util.Scanner;
public class MessageDigestExample {
public static void main(String args[]) throws Exception{
//Reading data from user
Scanner sc = new Scanner(System.in);
System.out.println("Enter the message");
String message = sc.nextLine();
//Creating the MessageDigest object
MessageDigest md = MessageDigest.getInstance("SHA-256");
//Passing data to the created MessageDigest Object
md.update(message.getBytes());
//Compute the message digest
byte[] digest = md.digest();
System.out.println(digest);
//Converting the byte array in to HexString format
StringBuffer hexString = new StringBuffer();
for (int i = 0;i<digest.length;i++) {
hexString.append(Integer.toHexString(0xFF & digest[i]));
}
System.out.println("Hex format : " + hexString.toString());
}
}