文章目录
前言
哈希算法被广泛运用在各种途径中,本文章将带你初步认识哈希算法及它的加密的实现操作效果。
一、哈希算法是什么?
哈希算法又称摘要算法(Disgest),一般指SHA家族,它是安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。
哈希算法特点
- 相同的输入一定得到相同的输出
- 不同的输入大概率得到不同的输出
因此,哈希算法的目的是验证原始数据是否被篡改
我们可以调用java的hashCode方法验证
System.out.println("Hello Java".hashCode());// 387417328
System.out.println("Hello java".hashCode());// 388370640
System.out.println("Hello,bob".hashCode());//-1095500357
哈希碰撞
哈希碰撞是指两个不同的输入得到了相同的输出。
例如:
String s1 = "通话";
String s2 = "重地";
System.out.println(s1.hashCode());// 1179395
System.out.println(s2.hashCode());// 1179395
哈希碰撞是不能避免的,这是因为输出的字节长度是固定的,但输入的字节长度不固定,有无数种输入,所以哈希算法是把无数的输入集合映射到一个有限的输出集合里,必然会产生碰撞。
既然不能避免碰撞,我们就要想办法降低碰撞的概率,提高哈希算法的安全性,所以一个安全的哈希算法必须满足:
- 碰撞概率低
- 不能被预测输出
常用的哈希算法
算法 | 输出长度(位) | 输出长度(字节) |
---|---|---|
MD5 | 128bits | 16bytes |
SHA-1 | 160bits | 20bytes |
RipeMD-160 | 160bits | 20bytes |
SHA-256 | 256bits | 32bytes |
SHA-512 | 512bits | 64bytes |
二、哈希算法对密码加密的实现
为什么要对密码加密储存呢?设想如果数据库中直接存入用户的密码,数据库一旦泄露,那用户的信息将暴露无遗。所以将密码加密后存入数据库,将用户密码加密后的信息与存入数据库的信息去比对验证,这样就算数据库泄露,加密后的密码并不能被直接用于登录。
1.MD5加密
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
public class Main {
public static void main(