首页 > 技术文章 > Http下用户名和密码明文显示问题

oyjg 2020-07-02 14:58 原文

问题描述:在请求协议不是Https的情况下,使用Http协议会让参数被抓包抓取,为了防止用户信息被获取,将登录请求传递的参数进行加密处理。

1.客户端首先发送一个请求,服务端返回一个随机数,并保存到session。

2.客户端将密码以及随机数组合,然后进行加密,发送到服务端。

3.服务端接收到用户名和密码,取出随机数,然后与数据库的密码进行同样的加密,然后将session中的随机数删除。

 

 实现:

@ApiOperation(value = "生成随机数",httpMethod = "GET",produces = "HTTP",protocols = "application/json")
    @GetMapping("/getRandom")
    public Result getRandom(HttpServletRequest request){
        Random random = new Random();
        int i = random.nextInt(1000);
        request.getSession().setAttribute("random",i);
        return new Result(BusinessConstant.SYSTEM_SUCESS_CODE,"发送成功",i);
    }

判断密码是否正确

 Integer random = (Integer)request.getSession().getAttribute("random");
 String md5Pwd = PasswordEncrypt.getMD5(adsUserAuth.getPassword());     //得到密码加密
 String pas = PasswordEncrypt.getMD5(md5Pwd + random);              //取得密码比对前端传递的







public class PasswordEncrypt {
    //盐,用于混交md5
    private static String salt = "oyabc_yyy";
    /**
     * 生成md5
     * @param str
     * @return
     */
    public static String getMD5(String str) {
        String base = str + "/" + salt;
        String md5 = DigestUtils.md5DigestAsHex(base.getBytes());
        return md5;
    }
}

 

推荐阅读