加密技术Md5Crypt需要在pom文件中导入包:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
一、第一种实现方法
1)、新增用户时,对新增后的用户密码进行加密
在userService.class中实现如下:
public int adduser(User user) {
user.setUserid(UUID.randomUUID().toString());
user.setPassword(Md5Crypt.md5Crypt(user.getPassword().getBytes()));
return userMapper.insert(user);
}
以上方法同样适用于修改用户密码时。
2)、使用新增的用户登录系统时,需要校验用户输入的密码与后台存储的密码是否一致
在loginService.class中实现如下:
public String checkUser(HttpServletRequest request, User user) {
UserCriteria example = new UserCriteria();
String password = user.getPassword();
example.createCriteria().andUsernameEqualTo(user.getUsername());
List<User> objs = userMapper.selectByExample(example);
if(objs.size()>0){
User user1 = objs.get(0);
//获取后台的用户密码
String md5Pass = MD5CryptUtil.getSalts(user1.getPassword());
//将用户输入的密码加密
String pass = Md5Crypt.md5Crypt(password.getBytes(),md5Pass);
//判断用户输入的密码与后台密码是否一致
if(!pass.equals(user1.getPassword())){
request.setAttribute("error", "密码错误!");
return "index";
}
return "main";
}
}else{
request.setAttribute("error", "用户不存在!");
return "index";
}
}
其中加密工具类实现如下:
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.codec.digest.Md5Crypt;
public class MD5CryptUtil
{
public static void main(String[] args) {
String tt1 = Md5Crypt.md5Crypt("333".getBytes());
System.out.println("~~~"+tt1);//$1$lYz58EdG$kfqNTaHTCdLaHCm/7fzXA1
String mysalt = getSalts(tt1);
System.out.println("~~~"+mysalt);//$1$lYz58EdG$
System.out.println("~~~"+Md5Crypt.md5Crypt("333".getBytes(), mysalt));//$1$lYz58EdG$kfqNTaHTCdLaHCm/7fzXA1
}
public static String getSalts(String password) {
String[] salts = password.split("\\$");
if (salts.length < 1) {
return "";
}
String mysalt = "";
for (int i = 1; i < 3; i++) {
mysalt += "$" + salts[i];
}
mysalt += "$";
return mysalt;
}
}
可以看到,登录时校验密码是否正确,先是取出后台该用户存储的密码,然后截取后台存储密码的$...$这部分。再把Md5Crypt.md5Crypt(用户登录时输入的密码.getBytes(), 截取的后台电部分加密的密码)进行加密,最后比该结果与后台存储的加密密码是否一致,即可校验密码的正确性。
二、md5加密密码还有一种方法,但是感觉不太安全。
以下是用户新增时,将用户密码和userid组合起来进行md5加密。
用户登录时,取登录时输入的密码与后台该用户对应的userid合起来进行md5加密。
最后比较两者是否一致。
1)、在userservice中实现
public int adduser(User user) {
user.setUserid(UUID.randomUUID().toString());
user.setPassword(DigestUtils.md5Hex(user.getPassword()+user.getUserid()));
return userMapper.insert(user);
}
2)、在loginservice类中校验
public String checkUser(HttpServletRequest request, User user) {
UserCriteria example = new UserCriteria();
String password = user.getPassword();
example.createCriteria().andUsernameEqualTo(user.getUsername());
List<User> objs = userMapper.selectByExample(example);
if(objs.size()>0){
User user1 = objs.get(0);
String pass = DigestUtils.md5Hex(password +user1.getUserid());
//判断用户输入的密码与后台密码是否一致
if(!pass.equals(user1.getPassword())){
request.setAttribute("error", "密码错误!");
return "index";
}else{
request.getSession().setAttribute("user",user1);
return "main";
}
}else{
request.setAttribute("error", "用户不存在!");
return "index";
}
}
网友评论