Md5优点:可以快速计算M,并且是单向的,无法从哈希值推导出原始消息。但如果密码过于简单,会有一定概率被暴力破解。
存储密码的常用方法:
1.双重MD5
2.MD5+加盐
3.双重MD5+加盐
我一般用2。只要数据库没有被攻破,密码被暴力破解的概率微乎其微。
Pom文件:
<!--用于加密--><dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId></dependency//userDO.setPwd(registerRequest.getPwd());// secret 保存盐userDO.setSecret("$1$" + CommonUtil.getStringNumRandom(8));// 密码 + 盐处理String cryptPwd = Md5Crypt.md5Crypt(registerRequest.getPwd().getBytes(), userDO.getSecret());// 保存加密后的密码userDO.setPwd(cryptPwd);public static String getStringNumRandom(int length) { Random random = new Random(); //生成随机数字和字母, StringBuilder saltString = new StringBuilder(length); for (int i = 1; i <= length; ++i) { saltString.append(ALL_CHAR_NUM.charAt(random.nextInt(ALL_CHAR_NUM.length()))); } return saltString.toString();}扥时候,再使用相同的方法验证密码是否一致
登录时,用同样的方法验证密码是否一致。
List<UserDO> userDOList = userMapper.selectList(new QueryWrapper<UserDO>().eq("***il", loginRequest.getMail()));if (userDOList != null && userDOList.size() == 1) { //已经注册 UserDO userDO = userDOList.get(0); String cryptPwd = Md5Crypt.md5Crypt(loginRequest.getPwd().getBytes(), userDO.getSecret()); if (cryptPwd.equals(userDO.getPwd())) { //登陆成功,生成token TODO return null; } else { return JsonData.buildResult(BizCodeEnum.ACCOUNT_PWD_ERROR); }
本文来自牙可爱的骚云吖~投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/544315.html