当前位置: 首页 > news >正文

spring实现md5加密

MD5信息摘要算法:

  • MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
  • md5是一种不可逆的加密,一定记住是不可逆的。即得到密文无法还原明文。
  • 同一个数据多次md5加密的结果是一样的,所以md5不能解密,但可以通过碰撞解密。比如你得到一个md5加密串"E10ADC3949BA59ABBE56E057F20F883E",你有N个密码,通过md5加密加密N个密码,得到其中一个和"E10ADC3949BA59ABBE56E057F20F883E"一致,那么则密码一致。

md5解密网站(实际是靠碰撞解密):md5在线解密破解,md5解密加密

代码实现: 

spring有个工具类DigestUtils,直接调用里面的方法md5DigestAsHex()就可以实现加密:

import org.springframework.util.DigestUtils;
String md5pwd = DigestUtils.md5DigestAsHex(password.getBytes());

实际应用:

将员工密码md5加密并与数据库的加密密码比对:

@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {
 
    @Autowired
    private EmployeeService employeeService;
 
    /**
     * 员工登录
     * @param request
     * @param employee
     * @return
     */
    @PostMapping("/login")
    public R<Employee> login(HttpServletRequest request,@RequestBody Employee employee){
 
        //1、将页面提交的密码password进行md5加密处理。同一个数据多次md5加密的结果是一样的,所以md5不能解密,但可以通过碰撞解密。
        String password = employee.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());
 
        //2、根据页面提交的用户名username查询数据库
        LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Employee::getUsername,employee.getUsername());
        Employee emp = employeeService.getOne(queryWrapper);
 
        //3、如果没有查询到则返回登录失败结果
        if(emp == null){
            return R.error("用户名或密码错误");
        }
 
        //4、密码比对,如果不一致则返回登录失败结果
        if(!emp.getPassword().equals(password)){
            return R.error("登录失败");
        }
 
        //5、查看员工状态,如果为已禁用状态,则返回员工已禁用结果
        if(emp.getStatus() == 0){
            return R.error("账号已被禁用");
        }
 
        //6、登录成功,将员工id存入Session并返回登录成功结果
        //被忘了存Session,默认有效期30分钟
        request.getSession().setAttribute("employee",emp.getId());
        return R.success(emp);
    }
 
    /**
     * 员工退出
     * @param request
     * @return
     */
    @PostMapping("/logout")
    public R<String> logout(HttpServletRequest request){
        //清理Session中保存的当前登录员工的id
        request.getSession().removeAttribute("employee");
        return R.success("退出成功");
    }
}

相关文章:

  • 微信公众平台快速开发框架源码
  • DoozyUI⭐️三、DoozyUI支持的 VR SDK列表
  • InfluxDB安装以及使用
  • 嵌入式C语言编程技巧
  • 技术分享 | App常见bug解析
  • flink scala版本报错JavaConversions$.deprecated$u0020propertiesAsScalaMap
  • 基于python的学生成绩管理系统毕业设计源码071143
  • 06_sentinel—分布式系统遇到的问题
  • 食品接触材料塑料中的异氰聚酯测试
  • .net core 控制台应用程序读取配置文件app.config
  • 微信小程序---验证码倒计时
  • Elasticsearch:运用 Python 实现在 Elasticsearch 上的向量搜索
  • 树的深度优先遍历与广度优先遍历
  • 大津法(最大类间方差法OTSU)
  • 搭建ELK分布式日志系统
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • HTTP中的ETag在移动客户端的应用
  • JavaScript函数式编程(一)
  • leetcode讲解--894. All Possible Full Binary Trees
  • MySQL主从复制读写分离及奇怪的问题
  • PAT A1017 优先队列
  • python_bomb----数据类型总结
  • select2 取值 遍历 设置默认值
  • Web Storage相关
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于Java中分层中遇到的一些问题
  • 手写双向链表LinkedList的几个常用功能
  • 用Canvas画一棵二叉树
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ​iOS实时查看App运行日志
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (¥1011)-(一千零一拾一元整)输出
  • (52)只出现一次的数字III
  • (bean配置类的注解开发)学习Spring的第十三天
  • (c语言)strcpy函数用法
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (WSI分类)WSI分类文献小综述 2024
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)springcloud实战之config配置中心
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)库存超卖案例实战——优化redis分布式锁
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)为什么要选择C++
  • (转)德国人的记事本
  • .aanva
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET企业级应用架构设计系列之技术选型
  • @ConditionalOnProperty注解使用说明
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解