散列函数非常有用,几乎出现在所有信息安全应用程序中.
散列函数是一种将数字输入值转换为另一个压缩数值的数学函数.散列函数的输入具有任意长度,但输出始终是固定长度.
散列函数返回的值称为消息摘要或简单地哈希值.下图说明了散列函数.
Java提供了名为 MessageDigest 的类,它属于java.security包.此类支持诸如SHA-1,SHA 256,MD5算法之类的算法,可将任意长度的消息转换为消息摘要.
要将给定消息转换为消息摘要,请按照步骤操作给出以下 :
MessageDigest类提供名为 getInstance()的方法.此方法接受一个String变量,该变量指定要使用的算法的名称,并返回实现指定算法的MessageDigest对象.
使用 getInstance()方法如下所示.
MessageDigest md = MessageDigest.getInstance("SHA-256");
创建消息摘要对象后,需要传递它的消息/数据.您可以使用 MessageDigest 类的 update()方法执行此操作,此方法接受表示消息的字节数组,并将其添加/传递给上面创建的MessageDigest对象.
md.update(msg.getBytes());
您可以使用摘要()生成消息摘要方法MessageDigest类此方法计算当前对象的哈希函数,并以字节数组的形式返回消息摘要.
使用摘要方法生成消息摘要.
byte [] digest = md.digest();
以下示例从文件中读取数据并生成消息摘要并打印出来.
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()); } }
上述程序生成以下输出 :
Enter the message Hello how are you [B@55f96302 Hex format: 2953d33828c395aebe8225236ba4e23fa75e6f13bd881b9056a3295cbd64d3