返回的md5 与数据库不一致,无论输出什么密码都提示错误

返回的md5 与数据库不一致,无论输出什么密码都提示错误

相关代码:

package com.imooc.reader.utils;

import org.apache.commons.codec.digest.DigestUtils;

public class Md5Utils {
public static String addSalt(String password, Integer salt) {
char[] chars = password.toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] + salt);
}
String str = new String(chars);
String md5 = DigestUtils.md5Hex(str);
return md5;
}

public static void main(String[] args) {
System.out.println(Md5Utils.addSalt("s123456", 1039));
}
}

相关代码:

package com.imooc.reader.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.imooc.reader.entity.Member;
import com.imooc.reader.expection.BussinessException;
import com.imooc.reader.mapper.MemberMapper;
import com.imooc.reader.service.MemberService;
import com.imooc.reader.utils.Md5Utils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Random;

@Service("memberService")
@Transactional
public class MemberServiceImpl implements MemberService {
@Resource
private MemberMapper memberMapper;

@Override
public Member selectById(Long memberId) {
Member member = memberMapper.selectById(memberId);
return member;
}

@Override
public Member createMember(String username, String password, String nickname) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("username", username);
List memberList = memberMapper.selectList(queryWrapper);
if (memberList.size()>0) {
throw new BussinessException("M01", "用户已存在");
}
Member member = new Member();
member.setUsername(username);
member.setNickname(nickname);
member.setCreateTime(new Date());
Random random = new Random();
Integer salt = random.nextInt(1000) + 1000;
member.setSalt(salt);
String md5 = Md5Utils.addSalt(password, salt);
member.setPassword(md5);
memberMapper.insert(member);
return member;
}

@Override
public Member checkLogin(String username, String password) {
QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username", username);
Member member = memberMapper.selectOne(queryWrapper);
if (member == null) {
throw new BussinessException("M02", "用户名不存在");
}
System.out.println(member.getSalt());
String md5 = Md5Utils.addSalt(password, member.getSalt());
if ( !md5.equals(member.getPassword())) {
throw new BussinessException("M03", "密码错误,请核证后输入");
}
return member;
}

}

相关代码:

​package com.imooc.reader.controller;

import com.imooc.reader.expection.BussinessException;
import com.imooc.reader.service.MemberService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.nio.BufferOverflowException;
import java.util.HashMap;
import java.util.Map;

@Controller
public class MemberController {
@Resource
private MemberService memberService;

@GetMapping("/register.html")
public ModelAndView showRegister() {
return new ModelAndView("/register");
}

@PostMapping("/register")
@ResponseBody
public Map register(String vc, String username, String password, String nickname, HttpServletResponse response, HttpServletRequest request) {
String verifyCode = (String) request.getSession().getAttribute("KaptchaVerifyCode");
Map result = new HashMap();
if (vc == null || verifyCode == null || !vc.equalsIgnoreCase(verifyCode)) {
result.put("code", "vc01");
result.put("msg", "验证码错误");
} else {
try {
memberService.createMember(username, password, nickname);
result.put("code", "0");
result.put("msg", "success");
} catch (BussinessException ex) {
ex.printStackTrace();
result.put("code", ex.getCode());
result.put("msg", ex.getMsg());
}
}
return result;
}

@GetMapping("/login.html")
public ModelAndView login() {
return new ModelAndView("/login");
}

@PostMapping("/check_login")
@ResponseBody
public Map checkLogin(String vc,String username, String password, HttpSession session) {
String verifyCode = (String) session.getAttribute("KaptchaVerifyCode");
Map result = new HashMap();
if (vc == null || verifyCode == null || !verifyCode.equalsIgnoreCase(vc)) {
result.put("code", "vc01");
result.put("msg", "验证码错误");
}else{
try {
memberService.checkLogin(username, password);
result.put("code", "0");
result.put("msg", "success");
} catch (BussinessException ex) {
ex.printStackTrace();
result.put("code", ex.getCode());
result.put("msg", ex.getMsg());
}
}
return result;
}
}

http://img1.sycdn.imooc.com//climg/6103c45409a1eeac06560273.jpg



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小脸 2021-07-31 11:13:37

同学你好,测试运行上述贴出代码,password和生成的md5都是一一对应的,如下:

http://img1.sycdn.imooc.com//climg/6104bf3809f7cf2917880631.jpg

问一下同学pom.xml中加密解密组件的版本是多少,如果不是1.14,建议更改版本后再试试

http://img1.sycdn.imooc.com//climg/6104bf8a099032ea05050151.jpg

注:建议同学在数据库重新创建一个用户,然后在尝试登录一下试试

http://img1.sycdn.imooc.com//climg/6104bfd709bb4bac07720022.jpg

祝学习愉快~


好帮手慕小脸 2021-07-30 18:33:06

同学你好,上述贴出代码经拼接测试是可以正确登录的,建议同学确保数据库密码与登录时密码保持一致时在尝试用户登录,其次建议下载课程源码对比一下,是否出现单词大小写或单词书写等错误

祝学习愉快~

  • 提问者 慕斯4319383 #1

    老师就是 生成的md5不一样呀 , password和盐值都是一样的 返回不一样的md5

    2021-07-30 22:29:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师