md5加密

  • 在实际开发中对用户的信息需要加密,比如密码,我们会使用加密算法进行加密,最常用的就是md5加密算法
  • 应用场景,用户的注册,用户登录,修改密码时进行加密解密操作
  • md5加密逻辑:我们可以认为password是一个字符转,我们要对这个字符串进行加密,这里需要一个盐值,这个盐值就是一个UUID的字符串,md5就是使用:盐值+password+盐值,使用DigestUtils类中的md5DigestAsHex()方法进行加密, 通常会使用循环进行多次加密,注意:这个盐值最好保存到数据库中,方便解密操作。

封装md5加密算法的方法

/*** 定义一个md5算法的加密处理* @param password* @param salt* @return*/private String getMd5Password(String password,String salt){for (int i = 0; i < 3; i++) {password = DigestUtils.md5DigestAsHex((salt+password+salt).getBytes()).toUpperCase();}return password;}

用户的注册

/*** 注册接口* @param user 用户的数据对象*/@Overridepublic void reg(User user) {User result = userMapper.findByUserName(user.getUsername());if (result != null){throw new UsernameDuplicatedException("用户名已被占用");}//密码加密:使用md5算法加密String oldPassword = user.getPassword();//获取盐值String salt = UUID.randomUUID().toString().toUpperCase();//将密码和盐值作为一个整体进行加密处理String md5Password = getMd5Password(oldPassword, salt);user.setPassword(md5Password);user.setSalt(salt);user.setIsDelete(0);user.setCreatedUser(user.getUsername());user.setModifiedUser(user.getUsername());Date date = new Date();user.setCreatedTime(date);user.setModifiedTime(date);Integer rows = userMapper.insert(user);if (rows != 1){throw new InsertException("失败(用户创建过程中产生了未知的异常)");}}

用户的登录

/*** 登录接口* @param username* @param password* @return*/@Overridepublic User login(String username,String password) {User result = userMapper.findByUserName(username);if (result == null){throw new UsernameNotFoundException("用户不存在");}//获取盐值,并以相同的方式加密前端传过来的密码,进行对比String salt = result.getSalt();String md5Password = getMd5Password(password, salt);if (!md5Password.equals(result.getPassword())){throw new PasswordNotMatchException("密码错误");}if (result.getIsDelete() == 1){throw new UsernameNotFoundException("用户不存在");}User user = new User();user.setUid(result.getUid());user.setUsername(result.getUsername());user.setAvatar(result.getAvatar());return user;}

用户修改密码

/*** 修改密码接口* @param uid* @param username* @param oldPassword* @param newPassword*/@Overridepublic void changePassword(Integer uid, String username, String oldPassword, String newPassword) {User result = userMapper.findByUid(uid);if (result == null || result.getIsDelete() == 1){throw new UsernameNotFoundException("用户数据不存在");}String oldMd5Password = getMd5Password(oldPassword, result.getSalt());if (!result.getPassword().equals(oldMd5Password)){throw new PasswordNotMatchException("原密码错误");}//将新的密码保存String NewMd5Password = getMd5Password(newPassword, result.getSalt());Integer rows = userMapper.updatePasswordByUid(uid, NewMd5Password, username, new Date());if (rows != 1){throw new UpdateException("修改密码失败,产生的未知异常");}}

Java中md5加密算法相关推荐

  1. Java中间MD5加密算法完整版

    携带Java软件开发过程.,因此Java中提供了自带的MessageDigest实现对文本的加密算法,以下是一个对文本进行加密的MD5加密工具类代码演示样例: package net.yuerwan. ...

  2. java中各种加密算法的实践应用

    1.前言 数字签名.信息加密是前后端开发都经常需要使用到的技术,应用场景包括了用户登入.交易.信息通讯.oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的签名加密算 ...

  3. java中md5加密和解密_如何在java中实现md5加密和解密

    如何在java中实现md5加密和解密 关注:273  答案:1  mip版 解决时间 2021-01-19 20:37 提问者精神疯裂 2021-01-19 05:36 如何在java中实现md5加密 ...

  4. java中md5怎么实现的_java中md5算法的实现

    /** * MD5的算法在RFC1321 中定义 * 在RFC 1321中,给出了Test suite用来检验你的实现是否正确: * MD5 ("") = d41d8cd98f00 ...

  5. iOS开发中MD5加密算法的实现

    一.MD5算法简介 MD5的全称是Message Digest Algorithm 5(消息摘要算法第五版),是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.在90年代初由MIT L ...

  6. JAVA中MD5加密实现

    MD5加密实现  结 package com.pb;import java.io.UnsupportedEncodingException; import java.security.MessageD ...

  7. JAVA中MD5加密(MD5工具类)

    转自:https://blog.csdn.net/starry7953810/article/details/79924156 为什么只有加密,没有解密呢?欢迎大佬留言解答 package utilw ...

  8. Java 中的加密算法

    加密算法 加密算法通常分为对称加密算法和非对称加密算法: ● 对称加密算法(symmetric-key cryptography):加密和解密时使用相同的密钥.常用的对称加密算法有 DES.AES. ...

  9. Java 中的加密算法: AES

    加密算法 加密算法通常分为对称加密算法和非对称加密算法: 对称加密算法(symmetric-key cryptography):加密和解密时使用相同的密钥.常用的对称加密算法有 DES.AES. 非对 ...

最新文章

  1. 人工智能芯片支持超低功耗器件的推理
  2. Myeclipse8.5配置本地tomcat
  3. python写的游戏怎么给别人玩-一步步教你怎么用python写贪吃蛇游戏
  4. LuoGu P1909 买铅笔???
  5. c语言实现天气预报步骤,天气预报是怎么预测天气的?天气预报制定需要哪些步骤...
  6. redis使用watch完成秒杀抢购功能
  7. DCN RepPoints解读
  8. (102)FPGA面试题-如何选择FPGA型号?
  9. VB.Command()的参数
  10. Milkyway database简析
  11. String.format()用法
  12. Zookeeper-watcher机制源码分析(一)
  13. Adobe PDF虚拟打印机 如何添加
  14. 地图刷新 android,android – 如何刷新谷歌地图.
  15. H264码流处理详解
  16. 有域名有服务器没有网站可以备案吗,只有域名没有服务器可以备案吗
  17. ubuntu服务器安装可视化桌面(Gnome)
  18. 解线性方程组的各种情况
  19. 饥荒交际服务器显示,饥荒联机版服务器挂礼物教程
  20. 机器学习-数据科学库 DAY02

热门文章

  1. wireshare无法捕捉到虚拟机VM的网卡解决办法
  2. 企业账号被封了怎么办
  3. 快捷键切换顶视图和底视图
  4. lightroom_如何在Lightroom中创建新目录
  5. 高新技术企业申报需要注意的问题
  6. js 密码正则表达式(至少8位且必有数字+特殊字符+字母)
  7. 3ds  max中复制、实例和参考的区别
  8. 《上海市战略性新兴产业发展专项资金管理办法》的通知
  9. 类方法和静态方法的区别
  10. ubuntu虚拟机黑屏解决方案