1 MD5加密技术
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
1.1 登陆验证
用户前台注册输入用户名信息(包括用户名和密码),controller将用户名和密码封装为User对象传入service进行业务逻辑
这儿的DigestUtil工具类建议使用spring框架中的
//1.获取用户注册的用户信息,封装为User对象,获取该对象的密码
String password = user.getPassword();
//2.将String类型的密码转化为byte类型
byte[] passwordBytes = password.getBytes();
//3.通过工具类DigestUtils的静态方法md5DigestAsHex对密码进行加密
String newPassword = DigestUtils.md5DigestAsHex(passwordBytes);
//4.替换原密码
user.setPassword(newPassword);
//简写
//String password = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
//user.setPassword(password);
用户前台登录输入用户名密码,controller将用户名和密码封装为User对象传入service进行业务逻辑
//md5明文加密
//1. 获取用户登录时传入的密码
String password = user.getPassword();
//2.将改密码转化为byte数组
byte[] passwordBytes = password.getBytes();
//3.通过工具类DigestUtils的静态方法md5DigestAsHex对密码进行加密
String newPassword = DigestUtils.md5DigestAsHex(passwordBytes);
//4.最后将加密后的新秘密进行后续操作
user.setPassword(newPassword);
//或者用下列方式简写
//String password = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
//user.setPassword(password);
2 BCryptPasswordEncoder加密、验证策略
bcrypt是一种跨平台的文件加密工具。Bcrypt就是一款加密工具,可以比较方便地实现数据的加密工作。你也可以简单理解为它内部自己实现了随机加盐处理。
例如,我们使用MD5加密,每次加密后的密文其实都是一样的,这样就方便了MD5通过大数据的方式进行破解。
Bcrypt生成的密文是60位的。而MD5的是32位的。
使用BCrypt 主要是能实现每次加密的值都是不一样的。
2.1 登录验证
初始化密码加密对象,将返回的对象交给spring容器管理
@Bean
public BCryptPasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
在所需要的业务类中将其注入
@Autowired
private BCryptPasswordEncoder passwordEncoder;
使用encode()方法对明文密码进行加密,返回加密后的密文密码
String encodePassword = passwordEncoder.encode(password);
使用matches()方法将明文密码和密文密码进行匹对,返回boolean类型(true或flase)
boolean result = passwordEncoder.matches(password, encodePassword )