MD5密码+随机盐
程序员文章站
2022-03-14 19:52:14
...
由于传统的MD5加密,黑客可以通过查散列值字典(例如彩虹表),得到某用户的密码。
因此目前可以用MD5加密配合上随机盐值,可极大的防止密码被**。
实体类
public class UserInfo {
private Integer id;
private String phone;
private String password; //密码
private String pwdKey; //随机盐
}
服务层实现类
1、生成随机盐值
2、随机盐值+键入密码合并,进行MD5加密,用到的方法(DigestUtils.md5DigestAsHex())
/*生成MD5密码盐*/
String str="zxcvbnmlkjhgfdsaqwertyuiopQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
//由Random生成随机数
Random random=new Random();
StringBuffer sb=new StringBuffer();
//长度为几就循环几次
for(int i=0; i<8; ++i){
//产生0-61的数字
int number=random.nextInt(62);
//将产生的数字通过length次承载到sb中
sb.append(str.charAt(number));
}
String salt=sb.toString(); //随机盐值
String passwordInfo=userInfo.getPassword(); //键入密码
String passwordSalt=salt+passwordInfo;
//MD5随机盐值加密
String password= DigestUtils.md5DigestAsHex(passwordSalt.getBytes());
测试类
@SpringBootTest
class DemoApplicationTests {
@Test
public static void main(String[] args){
UserInfo userInfo = new UserInfo();
userInfo.setPassword("123456");
String str="zxcvbnmlkjhgfdsaqwertyuiopQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
//由Random生成随机数
Random random=new Random();
StringBuffer sb=new StringBuffer();
//长度为几就循环几次
for(int i=0; i<8; ++i){
//产生0-61的数字
int number=random.nextInt(62);
//将产生的数字通过length次承载到sb中
sb.append(str.charAt(number));
}
String salt=sb.toString(); //随机盐值
String passwordInfo=userInfo.getPassword(); //键入密码
String passwordSalt=salt+passwordInfo;
//MD5随机盐值加密
String password= DigestUtils.md5DigestAsHex(passwordSalt.getBytes());
System.out.println(password);
}
}
加密后的密码
上一篇: Java 程序中MD5的简单使用