11.9密码加密,加盐算法(手动实现)

一.Spring提供了mb5加密的方法

注意:这种加密不安全,是有规律的,可以被暴力穷举(彩虹表). 

二.加盐加密(每次调用都是随机的,无规律的)

1.思路: 每次调用该方法产生唯一的盐值, 加上明文密码, 再经过md5加密形成最终的密码.

三.代码实现

package com.example.demo.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

/**
 * 密码加密,加盐+md5
 */
public class PasswordUtils {
    // 1.产生加盐后的密码
    public static String ecrypt(String password) {
        // 使用UUID产生唯一盐值,由于UUID的结果是36位(包含4个"-"),所以去重"-",保留32位
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 加盐后的密码
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 最终密码
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    // 2.根据盐值,生成密码(方法1的重载)
    public static String ecrypt(String password, String salt) {
        // 加盐后的密码
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 最终密码
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    // 3.验证两个密码是否相同
    public static boolean check(String inputPassword, String finalPassword) {
        // 非空校验
        if (!StringUtils.hasLength(inputPassword) || finalPassword.length() != 65
                || !StringUtils.hasLength(finalPassword)) {
            return false;
        }
        // 获取盐值salt,先根据"$"分割,再取前面一半
        String salt = finalPassword.split("\\$")[0];
        // 使用方法2,根据盐值,生成密码
        String ret = ecrypt(inputPassword, salt);
        return ret.equals(finalPassword);
    }

//    public static void main(String[] args) {
//        String inputPassword = "123456";
//        String finalPassword = PasswordUtils.ecrypt("admin");
//        System.out.println(finalPassword);
//        //System.out.println(PasswordUtils.check(inputPassword, finalPassword));
//    }
}

三.使用Spring提供的方法

1.security的三个主要功能

a.实现好了登录,包括业务和页面,只需要调用它实现的api,不需要写拦截器(它实现了过滤器).

b.实现了授权(不同身份可以使用的功能不同,比如管理员和普通用户).

c.实现了周边安全.

2.步骤

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/209999.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言之结构体

一.前言引入. 我们知道在C语言中有内置类型,如:整型,浮点型等。但是只有这些内置类 型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要名字、年龄、学号、⾝⾼、体…

【数据结构(五)】递归

文章目录 1. 递归的概念2. 递归能解决什么问题3. 递归的规则4. 递归实际应用案例4.1. 迷宫问题4.2. 八皇后问题4.2.1. 思路分析4.2.1. 代码实现 1. 递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题&…

第二节:服务拆分(案例)

一、服务拆分注意事项 1.1 拆分原则 每个微服务,不要重复开发相同业务(例如在单体项目中用到了一个查询,这个查询功能能够查询出订单信息、商品信息、用户信息,那么在拆分微服务时就不要将其写在一起了,订单的微服务只…

推荐3个完美替代 Navicat 的工具

现在企业,mysql数据库用的比较多,mysql数据库客户端的需求也就比较大,navicat就被大家所熟知。 这个工具,确实好用,功能也非常强大,但是,它的强大,是需要付费,或者用一些…

windows ce Remote Process Explorer定位程序崩溃地址

windows ce Remote Process Explorer定位程序崩溃地址 一:下载地址二:使用1)找到程序基准地址2) 定位程序异常位置 一:下载地址 链接:https://pan.baidu.com/s/1fQVBpputtRmynqa95DaPrg 提取码:cx65 二&a…

hexo博客部署到云服务器

欢迎大家到我的博客浏览。hexo博客部署到云服务器 | YinKais Blog 这篇文章带大家将hexo博客部署到云服务器上! 一、服务器环境安装 1、安装 node js yum install gcc-c make yum -y install nodejs yum -y install npm 验证 node -v npm -v 2、安装git、ngin…

DOM 事件的注册和移除

前端面试大全DOM 事件的注册和移除 🌟经典真题 🌟DOM 注册事件 HTML 元素中注册事件 DOM0 级方式注册事件 DOM2 级方式注册事件 🌟DOM 移除事件 🌟真题解答 🌟总结 🌟经典真题 总结一下 DOM 中如何…

SQL Server 数据库,为products表添加数据

在插入数据的时候,需要注意以下事项。 > 每次插入一整行数据,不可能只插入半行或几列数据。 > 数据值的数目必须与列数相同,每个数据值的数据类型、精度和小数位数也必须与相应的 列匹配。 > INSERT语句不能为标识列指定值&#…

DCCK“启航计划“3+2第三课相机参数于选型

面积小,通电发热都用以引入噪声

Leetcode—392.判断子序列【简单】

2023每日刷题&#xff08;四十七&#xff09; Leetcode—392.判断子序列 双指针实现代码 bool isSubsequence(char* s, char* t) {int lens strlen(s);int lent strlen(t);int left 0, right 0;if(lens 0) {return true;}while(right < lent) {if(t[right] s[left])…

百度下拉词挖掘工具,百度下拉词挖掘获取软件

百度下拉词挖掘工具 百度下拉词挖掘工具&#xff0c;作为站长和SEO人员必备的工具之一&#xff0c;有着令人瞩目的功能。它能够追踪用户在百度搜索栏中输入关键词时&#xff0c;百度自动为用户推荐的下拉关键词。这一推荐不仅仅是用户搜索历史的体现&#xff0c;更是一种市场需…

计算机网络TCP篇①

目录 一、TCP 基本信息 1.1、TCP 的头格式 1.2、什么是 TCP 1.3、什么是 TCP 连接 1.4、TCP 与 UDP 的区别 1.2、TCP 连接建立 1.2.1、TCP 三次握手的过程 1.2.2、为什么是三次握手&#xff1f;不是两次&#xff1f;四次&#xff1f;&#xff08;这个问题真是典中典&am…

二、设置三台虚拟机的内存、MAC地址、IP地址

目录 1、配置内存 2、配置MAC地址 2.1 配置node2的MAC地址

春秋云镜 CVE-2022-30887

春秋云镜 CVE-2022-30887 多语言药房管理系统 (MPMS) 靶场介绍 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口&#xff0c;客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库&#xff0c;并根据到期…

通义千问 模型学习 和 SDK试用

通义千问-14B-Chat-Int4 模型库 (modelscope.cn) **通义千问-14B&#xff08;Qwen-14B&#xff09;**是阿里云研发的通义千问大模型系列的140亿参数规模的模型。Qwen-14B是基于Transformer的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样&#xff0…

elementUI实现根据屏幕大小自适应换行,栅格化布局

需求&#xff1a; 默认一行展示4个卡片&#xff1b;当屏幕小于某个大小的时候&#xff0c;一行展示3个卡片&#xff1b;再小就展示2个&#xff1b;以此类推&#xff0c;最小就展示1个。 效果卡片样式如下图&#xff1a; 默认一行4个 屏幕缩小到某个阈值&#xff0c;一行展示…

软件测试工程师如何面试?

首先作为HR的角度&#xff1a; 一般我们面试的时候都会问应聘者一些问题&#xff0c;但是问什么&#xff1f;怎么问&#xff1f;每个HR都会有不同的做法。 有的HR问的比较广泛&#xff0c;有的HR比较注重专业度&#xff0c;还有的HR喜欢问一些开放性的问题&#xff0c;没有标…

工业机器视觉megauging(向光有光)使用说明书(三,轻量级的visionpro)

下来我们说说第二个相机的添加&#xff1a; 第一步&#xff0c;点击相机二&#xff0c;如下&#xff1a; 第二步&#xff0c;点击&#xff1a;加载工具组.xml&#xff0c;加载toolgroupxml2目录下的&#xff1a;工具组.xml 注意&#xff0c;一个相机只能用一个toolgroupxml,第…

SQL Server 2016(在Products表中查询数据)

1、实验环境。 以实验案例一的结果为环境。 2、需求描述。 【1】查询成本低于10元的水果信息。 【2】将所有蔬菜的成本上调1源。 【3】查询成本大于3元并小于40元的产品信息&#xff0c;并按照成本从高到低的顺序显示结果。 【4】查询成本最高的5个产品信息。 【5】查询有…

Java开发实战(二):IDEA安装

工欲善其事&#xff0c;必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前&#xff0c;我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置&#xff0c;我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环…