关于Spring中MD5加密工具类的使用
MD5加密的三种形式
1. 普通的md5进行加密
2. md5+salt(盐)的形式加密
3. 密码加密
实际开发中如何使用MD5
同一个字符串产生的md5是一样的,但是在项目的使用中为了保证密码等隐私的安全性,我们通常使用md5+盐或者是密码加密的形式
具体使用
1.通过spring中工具类产生的无盐md5
import org.springframework.util.DigestUtils;
String pws = DigestUtils.md5DigestAsHex("abd".getBytes());
System.out.println(pws); //4911e516e5aa21d327512e0c8b197616
2.通过spring中工具类产生的加盐md5
通过加盐的形式可以使每次产生的密码不一样
// 手动加盐 salt
String s = RandomStringUtils.randomAlphanumeric(10);
String pw = "123"+s;
String s1 = DigestUtils.md5DigestAsHex(pw.getBytes());
System.out.println(s1);
// 1.caf48c8d204092e86a290f3f4ad8fcf6 2.8e14ee50f31636231fe59002da0ec648
3.通过spring中工具类自己对密码进行加密
import com.heima.utils.common.BCrypt;
String gensalt = BCrypt.gensalt();//这个是盐 29个字符,随机生成
System.out.println(gensalt); //1.$2a$10$Pi.o0Qs2v3tcCsHkD9Kgb. 2.$2a$10$Q3Og2gyFbdfWvStJTfCdtu
//密码是123456
String password = BCrypt.hashpw("123456", gensalt); //根据盐对密码进行加密
System.out.println(password);//加密后的字符串前29位就是盐 //$2a$10$Pi.o0Qs2v3tcCsHkD9Kgb.AYaNt/yg6Y8KsAsz79s1KrUwhh8w/0u 2.$2a$10$Q3Og2gyFbdfWvStJTfCdtuOc572y/TlXFvzWiVcYRJJfnpQ5W23L.
4.校验密码的正确性
/**
* plaintext: 自己输入的密码
* hashed: 通过密码加密产生的密文
* 通过为true,不通过为false
*/
boolean checkpw = BCrypt.checkpw("123456", "$2a$10$abRa2gRztbu9dPKBY/nBXOTUP7i0gmzz6qLmiuIYb2LHUU2CsofXa");
System.out.println(checkpw); //true