一文详解密码学中的Hash 算法
上一篇文章里面,我们介绍了随机数以及随机数中的应用,可以看到密码学中到处都有随机数的身影,这种作为大部分密码学算法的基本组成被称之为 “加密基元“。今天我们一起来看一下另外一个加密基元 - 密码学Hash算法
什么是密码学Hash算法
密码学Hash算法是一个非常重要,而且常见的算法,是计算机密码学中的核心组成部分。密码学Hash算法是指将任何长度的二进制值映射成较短的固定长度二进制值的算法,这个较短的固定长度二进制值就是Hash值。先说一下:这个表述其实不是特别严谨,“任意长度”其实应该是 “算法允许长度范围内的任意长度”,因为有些密码学Hash算法是有输入长度限制的。既然很长的输入可以变成很短的输出,这就像我们写文章之后,需要写一个摘要一样,所以Hash值很多时候也叫做 “消息摘要”, Java中计算密码学Hash值的基类更是直接叫 MessageDigest.
下面代码能够更直观一点,我们来看一些密码学Hash的例子:
public static void main(String[] args) throws NoSuchAlgorithmException {
System.out.println(md5("abcd") + " <- abcd");
System.out.println(md5("abcd") + " <- abcd");
System.out.println(md5("明月几时有,把酒问青天,不知天上宫阙,今夕是何年") + " <- 明月几时有,把酒问青天,不知天上宫阙,今夕是何年");
System.out.println(md5("1") + " <- 1 ");
}
public static String md5(String content) throws NoSuchAlgorithmException {
MessageDigest instance = MessageDigest.getInstance("MD5");
instance.update(content.getBytes())