大家好,欢迎来到IT知识分享网。
概念
MD5 + 盐是一种密码存储的安全机制。MD5,全称为Message Digest Algorithm 5,是一种常用的哈希函数。在密码存储中,通常会使用盐(salt)来增加密码的安全性。
在密码验证过程中,使用相同的步骤生成哈希值,并将其与数据库中存储的哈希值进行比对。如果相同,则说明密码正确。
使用盐值可以增加密码的安全性,即使两个用户使用相同的密码,由于盐值的不同,其生成的哈希值也会不同,从而防止彩虹表等常见的攻击手段。但需要注意的是,单独使用MD5已不再被视为安全的方式,推荐使用更强大的哈希函数,如SHA-256等。同时,还可以与盐值结合使用其他的密码加密技术,以增加密码的安全性。
实战
比如说我们先做做一个登录功能,但是我们设想光有MD5是不够的,参考上面概念的说法,我们还需要对MD5进行一个加盐(不是吃的盐)的处理,那么请看下述代码
准备工作:
@Data public class LoginDto { / * 手机号码 */ // @ApiModelProperty(value = "手机号",required = true) private String phone; / * 密码 */ // @ApiModelProperty(value = "密码",required = true) private String password; }
分析:
对于业务层的实现,我们永远不要急着去写代码,先要写好自己的设计思路。
思路:
1→ 在登录时,首先我们要做一个判断去判断我们的手机号码和密码不能为空的,如果为空,那我们跑一个异常,显示密码不能为空
2→ 我们需要时MD5和盐进行整合,需要用到DigestUtils这个工具类,整合完成后需要再次进行判断,去判断密码是否为空,是否正确,如果不对,抛出异常,显示用户密码不正确
3→ 这时候我们需要返回数值 jwt token,并且去计算密码和盐值计算MD5哈希值,并将其与数据库中存储的密码进行比对。如果密码不匹配,则返回一个错误的响应结果,提示密码错误。
话不多说,直接上代码:
controller:
@Autowired private ApUserService apUserService; / * MD5加盐 * @param loginDto * @return */ @PostMapping("/login_auth") public ResponseResult login(@RequestBody LoginDto loginDto){ return apUserService.login(loginDto); }
Service层:
public interface ApUserService extends IService<ApUser> { / * MD5加盐 * @param loginDto * @return */ ResponseResult login(LoginDto loginDto); }
service.impl层:
public class ApUserServiceImpl extends ServiceImpl<ApUserMapper, ApUser> implements ApUserService { / * MD5加盐 * @param loginDto * @return */ @Override public ResponseResult login(LoginDto loginDto) { / * 登录 */ if(StringUtils.isNotBlank(loginDto.getPassword()) && StringUtils.isNotBlank(loginDto.getPassword())){ / * 根据手机查询用户信息 */ ApUser dbUser = getOne(Wrappers.<ApUser>lambdaQuery().eq(ApUser::getPhone, loginDto.getPassword())); if (dbUser==null){ return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"尼玛的,密码不对"); } / * 对比密码 */ String salt = dbUser.getSalt(); String password = loginDto.getPassword(); byte[] bytes = DigestUtils.md5DigestAsHex((password + salt).getBytes()).getBytes(); if(password.equals(dbUser.getPassword())){ return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR,"尼玛的密码错了"); } / * 返回数值 jwt token */ String token = AppJwtUtil.getToken(dbUser.getId().longValue()); Map<String,Object> map=new HashMap<>(); map.put("token",token); dbUser.setSalt(""); dbUser.setPassword(""); map.put("user",dbUser); return ResponseResult.okResult(map); }
以上就是全部过程,是不是又又又学会了一个技术点!
讲了这么多,大家是不是都学会了尼。如果学会了,麻烦给了一键三连,听说一键三连可以暴富哦!!!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113575.html