摘要算法:
同样的明文,经过同样的摘要算法,得到的结果是一样的
验证方法:验证经过摘要算法处理后的结果,如果密文一样那么就认为明文是一样的
//数据库存储的一定是密文,用户输入的是明文;把用户输入的明文经过MD5处理后和数据库的内容进行对比,结果一样就认为密码正确
网站解密MD5的原理是将一些较常见的密码经过MD5处理后的结果存储下来之后再与我们输入的需要解密的MD5数据进行比对达成的
盐值 salt
明文+salt=复杂明文,再将复杂明文进行MD5加密
在随机盐值的基础上如何进行验证:待验证的明文+这个随机盐值在进行MD5加密之后和数据库的密文进行对比//用户注册时要把这个随机盐值存储下来
@Slf4j
public class SecurityUtils {public static String encrypt(String password) {String salt= UUID.randomUUID().toString().replace("-","");String securityPassword= DigestUtils.md5DigestAsHex((salt+password).getBytes());String finalPassword=salt+securityPassword;return finalPassword;}public static boolean verify(String inputPassword, String sqlPassword) {if(sqlPassword==null||sqlPassword.length()!=64){log.error("数据库中的密码格式不对");return false;}String salt=sqlPassword.substring(0,32);String secretPassword=DigestUtils.md5DigestAsHex((salt+inputPassword).getBytes());return sqlPassword.equals(salt+secretPassword);}
}
因为有些用户的密码设置的较为简单,所以应该先加一个随机盐值之后再组合起来进行MD5加密,加密后将密文和盐值组合起来存入数据库中以达到对用户密码加密的结果