发表于: 2020-06-30 20:12:11
0 1771
今天完成的事情:
1.代码中加入登录注册功能
2.md5加盐加密
工具类:
public class Md5Util2 {
/**
* 计算一个字符串的MD5信息
*
* @param str 字符串
* @return MD5值
*/
public static String getMD5(String str) {
try {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(str.getBytes());
// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
return new BigInteger(1, md.digest()).toString(16);
} catch (Exception e) {
e.printStackTrace();
return str;
}
}
/**
* 获取48位加密密码
*
*/
public static String generate(String password) {
Random r = new Random();
StringBuilder sb = new StringBuilder(16);
sb.append(r.nextInt(99999999)).append(r.nextInt(99999999));
int len = sb.length();
if (len < 16) {
for (int i = 0; i < 16 - len; i++) {
sb.append("3");
}
}
String salt = sb.toString();
password = getMD5(password + salt);
char[] cs = new char[48];
for (int i = 0; i < 48; i += 3) {
cs[i] = password.charAt(i / 3 * 2);
char c = salt.charAt(i / 3);
cs[i + 1] = c;
cs[i + 2] = password.charAt(i / 3 * 2 + 1);
}
return new String(cs);
}
/**
* 校验密码是否正确
*/
public static boolean verify(String password, String md5) {
char[] cs1 = new char[32];
char[] cs2 = new char[16];
for (int i = 0; i < 48; i += 3) {
cs1[i / 3 * 2] = md5.charAt(i);
cs1[i / 3 * 2 + 1] = md5.charAt(i + 2);
cs2[i / 3] = md5.charAt(i + 1);
}
String salt = new String(cs2);
return getMD5(password + salt).equals(new String(cs1));
}
}
注册加密:
@RequestMapping(value = "/reg", method = RequestMethod.POST)
public String addUser(@Valid User user, BindingResult bindingResult, Model model) throws Exception {
if (bindingResult.hasErrors()) {
FieldError fe = bindingResult.getFieldError();
return "register";
}
String pwd=user.getPwd();
String md5pwdSalt=Md5Util2.generate(pwd);
user.setPwd(md5pwdSalt);
long createAt = DateUtil.timestamp();
user.setCreateAt(createAt);
boolean check = userService.check(user.getUsername());
if (check) {
model.addAttribute("message","用户名已被使用,请更换用户名");
return "register";
} else {
userService.addUser(user);
}
return "login";
}
登录检验:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(User user, HttpSession session, Model model) {
String pwd = user.getPwd();
String username=user.getUsername();
String md5pwd = userService.checkpwd(username);
boolean match=Md5Util2.verify(pwd,md5pwd);
if (match) {
user.setPwd(md5pwd);
userService.login(user);
return "redirect:/u/show1";
} else {
model.addAttribute("message", "用户名不存在或密码错误,请重新登录。");
}
return "login";
}
明天计划的事情:学习cookie完成任务五
遇到的问题:
使用Spring自带的md5加密不知道加盐加密怎么弄,又换了一个。
收获:
理解了密码加密
评论