MD5+盐保存密码
特点:
- MD5加密没有反向的解密算法。
- MD5加密算法对于一个字符串多次运算得到的结果是一样的。只要字符串改变了一个任意字符,得到的密文与源字符的密文是完全不一样的。
主要作用:
在用户注册时,会将密码进行MD5加密,存到数据库中,这样可以防止数据库被恶意攻击得到用户的密码信息。
MD5+盐原理:
//例如用户输入密码为123456
String password="123456";
// 在密码后面随机加一个数字进行拼串后再使用MD5算法进行加密
String str= DigestUtil.md5Hex(password+1);
System.out.println(str); //aaa42296669b958c3cee6c0475c8093e
//在加密后的密码前面加上刚才的随机数进行拼串,并将此串当成密码保存在数据库
String str2=1+str;
System.out.println(str2); //1aaa42296669b958c3cee6c0475c8093e
//当要进行登陆的的时候,将用户输入的密码按上面的规则进行加密,
//将加密后的密码和数据库中保存的密码进行对比
//先从数据库的密码中取到盐
String str3=str2.substring(0,1);
//例如用户输入的密码就是123456
String str4=DigestUtil.md5Hex("123456"+str3);
String str5=str3+str4;
//判断密码是否一致
System.out.println(str5.equals(str2)); //true
糊涂工具包已经将MD5+盐封装成方法:
//使用MD5+盐的方式进行加密,没有第二个参数就是随机盐,有第二个参数就是指定盐,第二个参数就是盐
String str9=BCrypt.hashpw("123456");
System.out.println(str9); //$2a$10$oubciGXH1pEh/8BX2w05ze8/em/pzEscFC97m4fCiZ.9atTTSwd0u
//校验密码,前面为用户输入的,后面是自己存储的
System.out.println( BCrypt.checkpw("123456",str9)); //true