加盐加密算法

    • MD5加密
    • 加盐加密
    • 项目密码升级

MD5加密

MD5一系列公式进行复杂数学运算;特点:(用途校验和、计算hash值方式、加密)
1:定长;无论原始数据多长;算出的结果都是4或者8字节的版本。
2:冲突概率很小;就算你只改动一个地方;但是计算的结果相比之下是非常大
3:不可逆;正着计算很容易;逆着计算理论不可能实现;计算量很大;当前的条件是不可能实现

彩虹表:网上解密的工具只能把一些常见的字符串MD5值保存好;然后进行查表的值;并不是真实的计算出结果。
在这里插入图片描述
java中如何将一段这种字符串的password进行MD5加密呢:
DigestUtils.md5DigestAsHex是Apache Commons Codec库中的一个工具方法,用于计算传入参数的MD5哈希值,并返回一个16进制字符串表示的结果。
传入的参数需要是一个字节数(byte[])或字符串(String)。如果参数是字符串,则会自动将其转换为对应的字节数组。

String password="12345678";
String md5password=DigestUtils.md5DigestAsHex(password.getBytes());
System.out.println(md5password);

同一个字符串md5的值一个固定值;如果人家获取到你的md5这个值;破解密码随随便便;直接遍历彩虹表穷举;相当于加一把没带钥匙的锁

加盐加密

加密:密码+随机盐值 进行md5加密
解密:我们也没法解;因为是不可逆的;我们记住加密规则;再走一遍流程;对比用户登录的密码和数据库的是否一样

盐值:
我们得知道盐值是什么;才能重新再走一遍的规则;那就涉及盐值怎么来的;怎么储存

获取盐值:

String salt=UUID.randomUUID().toString().replace("-","");
//UUID一般被表示为32个字符的十六进制数,最常用的格式是8-4-4-4-12的五段分割
//例如:c4a760a8-dbcf-11e9-8f92-2b1af3aec0a6;我们把横杠去掉;替换成空字符串

你的盐值要每次不一样(每个用户的是不一样);那么就使用uuid;时间戳有可能重复。多个人的随机盐值是一样;会造成破解多个和破解一个是一样难度。

储存盐值:
方式1:盐值和密码单独存储两个字段(如果对方破解你数据库内容;那就很危险;相当于我告诉黑客;盐值是……;你自己去用彩虹表加密遍历一下和我的这个密码对比) 不现实
方式2:盐值和密码整合一起;存在一个字段。(用一个分隔符;分割哪里是盐值;哪里是MD5后的密码;给黑客破解增加难度;它还得猜你哪个是分隔符;那边是盐值;哪边是密码)
使用一个规则约定这里盐值和密码:分隔符(缺点;传递的正文不能有这个分隔符)?或者是按位数;前32位存盐值、后32位存密码。

为什么加盐值后破解成本大大提升:
假设我的盐值是1-n(实际更复杂);要暴力破解对应n个彩虹表;得拿盐值去和彩虹表的每一个进行MD5再和我们的密码对比。而且这样子破解的只是一个用户。

代码实现:

package com.example.demo.service;import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;import java.util.UUID;public class salt_encrypt {//加密过程;相当于注册的时候要用于存进去数据库的password字段public static String encrypt(String reg_password){String salt= UUID.randomUUID().toString().replace("-","");String md5password= DigestUtils.md5DigestAsHex((reg_password+salt).getBytes());String dbpassword=salt+"$"+md5password;return dbpassword;}public static boolean decrypt(String login_password,String dbpassword){boolean result=false;//判空操作if(StringUtils.hasLength(login_password)&&StringUtils.hasLength(dbpassword)){//取出盐值String [] dbpassword1=dbpassword.split("\\$");
//                因为 "$" 在正则表达式中具有特殊含义。在正则表达式中,"$" 表示行结束的位置,
//                如果不进行转义,正则表达式会将它解释为行结束符意思,而不是普通的字符 "$"。String salt=dbpassword1[0];String dbpassword2=dbpassword1[1];//获取我们直接用数据库的盐值+分隔符+md5密码是否包含这个要验证的密码md5值login_password=DigestUtils.md5DigestAsHex((login_password+salt).getBytes());if(dbpassword1.equals(login_password)){result=true;}}return result;}}

项目密码升级

代码改造:
UserController的注册;修改前在这里插入图片描述
修改后:存的密码变成加盐md5后的
在这里插入图片描述
UserController的登录:修改前
在这里插入图片描述
修改后:
在这里插入图片描述

检查数据库password的字段是否是65位的;因为我们之前可能没使用加盐加密就没考虑那么多;如果我们之前随时password varchar(32)那么可以通过alter table userinfo modify column password varchar(65);进行修改

验证:
注册成功;且储存的密码样式是我们需要的。登录成功;说明验证是通过了。
在这里插入图片描述
Spring 框架提供了有加盐加密的方式,最常用的是Spring Security :
1:使用先添加Security框架
2:内置一个登录页面;我们得把这个关闭掉(因为我们自己有登录页面;不需要用它的)
在这里插入图片描述

它会在控制台提供一个密码给你
在这里插入图片描述
如何关闭:
在启动类添加这个(自动注入;关闭这个类自动的加载;但是APi还是能用的;因为我们把这个依赖加入项目了;;spring是真的默认是自动加载的)
在这里插入图片描述
使用:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPT内功心法:搜索思维到GPT思维的转换

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

由浅入深学习Tapable

文章目录 由浅入深学习TapableTapable是什么Tapable的Hook分类同步和异步的 使用Sync*同步类型钩子基本使用bailLoopWaterfall Async*异步类型钩子ParallelSeries 由浅入深学习Tapable webpack有两个非常重要的类:Compiler和Compilation。他们通过注入插件的方式&a…

MySQL group by后取每个分组中最新一条数据

一、需求 MySQL group by后取每个分组中最新一条数据 二、实现 1)方案1:使用min()和max()方法 1、group by后取每个分组中最新一条数据 SELECT MAX(test_id) FROM test GROUP BY test_user_id; 2、group by后取每个分组中第一条插入的数据 SELECT…

【不支持发行版本 5】错误解决

说明&#xff1a;启动项目报下面的错误&#xff0c;不支持发行版本 5 解决&#xff1a;在pom文件中添加下面这两行配置&#xff0c;修改成你自己安装的jdk版本 <properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target&g…

大华智慧园区综合管理平台文件上传漏洞复现(HW0day)

0x01 产品简介 “大华智慧园区综合管理平台”是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。平台意在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 0x02 漏洞概述 大华智慧园…

基于灰狼优化(GWO)、帝国竞争算法(ICA)和粒子群优化(PSO)对梯度下降法训练的神经网络的权值进行了改进(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

解决监督学习,深度学习报错:AttributeError: ‘xxx‘ object has no attribute ‘module‘!!!!

哈喽小伙伴们大家好呀&#xff0c;很长时间没有更新啦&#xff0c;最近在研究一个问题&#xff0c;就是AttributeError: xxx object has no attribute module 今天终于是解决了&#xff0c;所以来记录分享一下&#xff1a; 我这里出现的问题是&#xff1a; 因为我的数据比较大…

深度学习之用PyTorch实现逻辑回归

0.1 学习视频源于&#xff1a;b站&#xff1a;刘二大人《PyTorch深度学习实践》 0.2 本章内容为自主学习总结内容&#xff0c;若有错误欢迎指正&#xff01; 代码&#xff08;类比线性回归&#xff09;&#xff1a; # 调用库 import torch import torch.nn.functional as F#…

Amazon CloudFront 部署小指南(五)- 使用 Amazon 边缘技术优化游戏内资源更新发布...

内容简介 游戏内资源包括玩家的装备/弹药/材料等素材&#xff0c;对游戏内资源的发布和更新是游戏运营商的一个常规业务流程&#xff0c;使用频率会十分高&#xff0c;所以游戏运营商希望该流程可以做到简化和可控。针对这个需求&#xff0c;我们设计了 3 个架构&#xff0c;面…

【Django】招聘面试管理01 创建项目运行项目

文章目录 前言一、创建项目二、运行项目三、访问后台管理页面四、配置项总结 前言 跟着视频学一学&#xff0c;记录一下。 一、创建项目 照着步骤创建虚拟环境&#xff0c;安装Django等依赖包&#xff0c;创建项目&#xff1a;【Django学习】01 项目创建、结构及命令 > d…

计算机网络实验1:网络命令学习

文章目录 1. 主要教学内容2. ping命令2.1 发送ping测试报文2.2 检测TCP/IP 3. tracert命令4. ipconfig命令5. netstat命令6. arp命令7. net命令8. netsh命令 1. 主要教学内容 实验内容&#xff1a;学习ping、tracert、ipconfig等常用的网络命令。所需学时&#xff1a;1。重难点…

微服务实战项目-学成在线-项目部署

微服务实战项目-学成在线-项目部署 1 什么是DevOps 一个软件的生命周期包括&#xff1a;需求分析阶、设计、开发、测试、上线、维护、升级、废弃。 通过示例说明如下&#xff1a; 1、产品人员进行需求分析 2、设计人员进行软件架构设计和模块设计。 3、每个模块的开发人员…

Vue输入框或者选择框无效,或者有延迟

问题剖析 使用Vue这种成熟好用的框架&#xff0c;一般出现奇奇怪怪的问题都是因为操作不当导致的&#xff0c;例如没有合理调用组件、组件位置不正确、没有合理定义组件或者变量、样式使用不当等等... 解决方案 如果你也出现了输入框输入东西&#xff0c;但是没有效果…

c语言每日一练(5)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…

零代码编程:用ChatGPT对Excel文件批量重命名

文件夹下面有几百个Excel文件&#xff0c;希望去掉开头的“【企查查】专利-”&#xff0c;去掉结尾的电话&#xff0c;然后在后面统一加上“发明专利列表”这几个字。 可以在ChatGPT中这样输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个文件标题重命名…

【CI/CD】Git Flow 分支模型

Git Flow 分支模型 1.前言 Git Flow 模型&#xff08;本文所阐述的分支模型&#xff09;构思于 2010 年&#xff0c;也就是 Git 诞生后不久&#xff0c;距今已有 10 多年。在这 10 多年中&#xff0c;Git Flow 在许多软件团队中大受欢迎。 在这 10 多年里&#xff0c;Git 本身…

窥探系列之Mybatis-plus XML分页查询

mybatisPlus分页查总数 Page类在mybatisPlus中用于分页查询&#xff0c;继承Pagination类&#xff0c;Pagination类的searchCount字段控制是否查询总记录数 顺着看哪里用到了searchCount&#xff1a; com.baomidou.mybatisplus.plugins.PaginationInterceptor 是mybatisPlus…

微服务与Nacos概述-2

微服务间消息传递 微服务是一种软件开发架构&#xff0c;它将一个大型应用程序拆分为一系列小型、独立的服务。每个服务都可以独立开发、部署和扩展&#xff0c;并通过轻量级的通信机制进行交互。 应用开发 common模块中包含服务提供者和服务消费者共享的内容 provider模块是…

Android14操作系统全新功能发布,允许用户撤销全屏权限

最新发布的Android 14操作系统带来了一系列全新功能和改进&#xff0c;其中之一是新增了选项&#xff0c;让用户能够撤销应用的全屏权限。这样一来&#xff0c;用户可以阻止一些应用在全屏模式下隐藏状态栏和导航栏&#xff0c;从而更方便地查看时间、电量和其他信息。 此外&a…

Java程序猿搬砖笔记(十六)

文章目录 狂神说-Elasticsearch 7.6入门学习笔记Windows Elasticsearch IK分词器插件启动报错Elasticsearch的ik分词器自定义字典myDict.dic的编码格式需要为UTF-8,否则无效Elasticsearch使用term查询无数据返回的原因Elasticsearch如果没给映射&#xff0c;字段默认使用standa…