MD5
单向的加密:只能由目标得到加密的结果,不能反推。
盐值:给解密加点难度,同一个值不同的盐,结果不一样。
迭代次数:对结果重复加密。
小案例
@Test
public void f3() {
Md5Hash md5 = new Md5Hash("123456");
System.out.println(md5.toString());
md5 = new Md5Hash("123456", "aaa");
System.out.println(md5.toString());
md5 = new Md5Hash("123456", "aaa", 1024);
System.out.println(md5);
}
运行结果:
e10adc3949ba59abbe56e057f20f883e
88316675d7882e3fdbe066000273842c
b8d63fc060e2b5651e8cb4e71ba61e6f
引入Shiro
简单的方式是代码指定,在传入密码的时候套一层:
@Test
public void f4() {
MyRealm realm = new MyRealm();
DefaultSecurityManager sm = new DefaultSecurityManager(realm);
SecurityUtils.setSecurityManager(sm);
Subject s = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("abc", md5("123456"));
s.login(token);
System.out.println(s.isAuthenticated());
}
public String md5(String input) {
return new Md5Hash(input, "aaa", 1024).toString();
}
然后把数据库中也改一下:
运行效果: