数据库密码实现加盐加密处理

在实际的开发中,我们的数据库密码一般都是明文的方式存储在数据库中,但是,这种操作非常不安全,容易被黑!

那么,此时我们就需要对其进行加密处理,市面上比较常见的就是MD5加密了,但是,普通的使用MD5来进行加密,虽然也是可以,但是架不住某些用户的密码是123456/1234/123/1234567890……等的简单密码,使用MD5加密后,虽然变得复杂了一些,但是对于MD5加密,有些实力强的黑客,能够将常见的简单的加密后的密码放到一张文档中,一一进行测试……这种虽然很费劲,但是在收益较大的情况下,黑客一定会乐于尝试的!

那么,有没有其他办法来解决这个问题呢?

那么,此时就需要用到加盐来处理了!
所谓的盐就是一个可变的字符串!用UUID来随机生成的字符串(定长)!

在我们保存密码的时候,将UUID+加密后的密码一块存储到数据库中,这样当用户登录后,通过用户名拿到密码,得到盐值,用盐值跟用户输入的密码进行加密处理,然后在跟数据库中的密码进行对比…………,从而实现数据库密码实现加盐加密处理!

上面便是简单的介绍,那么,接下来……详细的说明一下吧!

加密介绍

在MySQL数据库中, 我们常常需要对密码, ⾝份证号, ⼿机号等敏感信息进⾏加密, 以保证数据的安全性. 如果使⽤明⽂存储, 当⿊客⼊侵了数据库时, 就可以轻松获取到⽤⼾的相关信息, 从⽽对⽤⼾或者企业造 成信息泄漏或者财产损失. ⽬前我们⽤⼾的密码还是明⽂设置的, 为了保护⽤⼾的密码信息, 我们需要对密码进⾏加密

密码算法分类

密码算法主要分为三类: 对称密码算法, ⾮对称密码算法, 摘要算法

  1.  对称密码算法 是指加密秘钥和解密秘钥相同的密码算法. 常⻅的对称密码算法有: AES, DES, 3DES, RC4, RC5, RC6 等. 
  2. ⾮对称密码算法 是指加密秘钥和解密秘钥不同的密码算法. 该算法使⽤⼀个秘钥进⾏加密, ⽤另外⼀ 个秘钥进⾏解密. ◦ 加密秘钥可以公开,⼜称为 公钥 ◦ 解密秘钥必须保密,⼜称为 私钥 常⻅的⾮对称密码算法有: RSA, DSA, ECDSA, ECC 等 
  3. 摘要算法 是指把任意⻓度的输⼊消息数据转化为固定⻓度的输出数据的⼀种密码算法. 摘要算法是 不可逆的, 也就是⽆法解密. 通常⽤来检验数据的完整性的重要技术, 即对数据进⾏哈希计算然后⽐ 较摘要值, 判断是否⼀致. 常⻅的摘要算法有: MD5, SHA系列(SHA1, SHA2等), CRC(CRC8, CRC16, CRC32)

加密思路

在常见的项目中, 我们大多数都是采⽤MD5算法来进⾏加密.

问题:

虽然经过MD5加密后的密⽂⽆法解密, 但由于相同的密码经过MD5哈希之后的密⽂是相同的, 当存 储⽤⼾密码的数据库泄露后, 攻击者会很容易便能找到相同密码的⽤⼾, 从⽽降低了破解密码的难度. 因 此, 在对⽤⼾密码进⾏加密时,需要考虑对密码进⾏包装, 即使是相同的密码, 也保存为不同的密⽂. 即 使⽤⼾输⼊的是弱密码, 也考虑进⾏增强, 从⽽增加密码被攻破的难度.

解决⽅案:

采⽤为⼀个密码拼接⼀个随机字符来进⾏加密, 这个随机字符我们称之为"盐". 假如有⼀个加 盐后的加密串,⿊客通过⼀定⼿段这个加密串, 他拿到的明⽂并不是我们加密前的字符串, ⽽是加密前 的字符串和盐组合的字符串, 这样相对来说⼜增加了字符串的安全性.

解密流程:

MD5是不可逆的, 通常采⽤"判断哈希值是否⼀致"来判断密码是否正确.

如果⽤⼾输⼊的密码, 和盐值⼀起拼接后的字符串经过加密算法, 得到的密⽂相同, 我们就认为密码正确 (密⽂相同, 盐值相同, 推测明⽂相同)

参考代码:

import org.springframework.util.DigestUtils;import java.util.UUID;public class SecurityUtils {public static void main(String[] args) {//加密
//        String md5Str = DigestUtils.md5DigestAsHex("123456".getBytes());
//        System.out.println(md5Str);//
//        String uuid = UUID.randomUUID().toString();// 随机生成一个字符串, 且不会重复
//        System.out.println(uuid.replace("-",""));//        System.out.println(encry("123456"));
//        boolean verify = verify("123456", "84f37ec4949b407bbde0373dd648c26c37843422e00a0c1b764762ae77aa3144");
//        System.out.println(verify);System.out.println(encry("admin"));boolean verify = verify("admin", "bba5514860cc414aa61f826b91dabb0cbd79f8ff6bc3a89832ca659ecf070b64");System.out.println(verify);}/*** 加密* @param password  明文密码* @return  盐值+密文*/public static String encry(String password){//生成随机盐值String salt = UUID.randomUUID().toString().replace("-","");System.out.println(salt);//加密  盐值+明文String securityPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes());//数据库中存储   盐值+密文return salt+securityPassword;}/*** 校验* inputPassword用户输入的密码* sqlPassword数据库中的密码* @return*/public static boolean verify(String inputPassword, String sqlPassword){//取出盐值if (sqlPassword ==null || sqlPassword.length()!=64){return false;}String salt = sqlPassword.substring(0,32);//得到密文String securityPassword = DigestUtils.md5DigestAsHex((salt+inputPassword).getBytes());return (salt+securityPassword).equals(sqlPassword);}
}

并且修改登录验证:

修改数据库中的密码:代码已贴,自行测试!

当我们登录时,点击F12便可以看到如下效果:

此时我们的密码,便不再是明文的了!!已经是成功加盐加密处理后的密码啦!

需要注意的是,其他的有关用户密码的增改操作也得更改相应的代码!!

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2024年起重信号司索工(建筑特殊工种)证模拟考试题库及起重信号司索工(建筑特殊工种)理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年起重信号司索工(建筑特殊工种)证模拟考试题库及起重信号司索工(建筑特殊工种)理论考试试题是由安全生产模拟考试一点通提供,起重信号司索工(建筑特殊工种)证模拟考试题库是根据起重信号司索工(建筑特…

aarch64环境安装minio

1.去官网查看最新版本 MinIO | 用于AI的S3 & Kubernetes原生对象存储 2.使用命令安装,采取wget和dnf安装 wget https://dl.min.io/server/minio/release/linux-arm64/archive/minio-20240113075303.0.0-1.aarch64.rpm -O minio.rpm sudo dnf install minio.rpm 注意点…

SpringCloud Nacos的配置与使用

Spring Cloud Nacos的配置与使用 文章目录 Spring Cloud Nacos的配置与使用1. 简单介绍2. 环境搭建3. 服务注册/服务发现4. Nacos 负载均衡4.1 服务下线4.2 权重配置4.3 同集群优先访问 5. Nacos 健康检查5.1 两种健康检查机制5.2 服务实例类型 6.Nacos 环境隔离6.1 创建namesp…

GeneCompass:跨物种大模型用于破解基因调控机理

GeneCompass是第一个基于知识的跨物种基础模型,该模型预先训练了来自人类和小鼠的超过1.2亿个单细胞转录组。在预训练过程中,GeneCompass有效整合了四种生物先验知识,以自监督的方式增强了对基因调控机制的理解。对多个下游任务进行微调&…

E19.【C语言】练习:数组

有序序列合并 描述 输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。 数据范围: 1≤n,m≤1000 , 序列中的值满足 0≤val≤30000 输入描述: 输入包含三行, 第一行包含两个正整数n, m,用空…

VSCode 解决 pylint 报错 No name QWidget in module PyQt5.QtWidgets

问题 启用了 VSCode 的 Pylint 插件, 即便 Python 环境中安装了 PyQt5, 也无法正确解析 PyQt5 的导入 PyQt5 底层代码是用 C/C 写的, pylint 默认不会深入解析 pylint doesn’t load any C extensions by default, because those can run arbitrary code. 解决 修改 Settings…

k8s学习--k8s集群部署kubesphere的详细过程

文章目录 kubesphere简介k8s群集部署kubespere环境准备工作一、配置nfs二、配置storageclass三、kubesphere开启服务(devops) kubesphere简介 下面是官方文档描述 KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多…

免费的批量自动处理工具,让重复工作一键搞定

对于一些重复的工作,大部分情况下我们可以借助工具批量自动处理,无需手动一个一个去操作。小编今天就和大家分享几款可以一键帮我们搞定重复任务的免费工具。 1.TinyTask:解放双手的自动化神器 TinyTask是一款小巧但功能强大的自动化工具&a…

如何用AP525采集【车机播放的扫频信号】的频响曲线

一.测试目的 车机播放20~20khz的扫频信号,这个信号从功放的输出端(eg. CH1)接入到AP525的模拟输入端(eg. Analog input),通过APx500 软件分析采集回来的扫频信号的频响曲线 二.APx500输出输入配置 三.生成扫频信号 1…

习题2.25~2.26

没啥需要解释的,直接贴代码和执行结果 2.25 (def x (list (list 7))) (first (first x) )(def x (list 1 3 (list 5 7) 9)) (first (rest (first (rest (rest x)))))(def x (list 1 (list 2 (list 3 (list 4 (list 5 (list 6 7) )))))) (first (rest (first (rest (…

magento2 安装win环境和linux环境

win10 安装 安装前提,php,mysql,apach 或nginx 提前安装好 并且要php配置文件里,php.ini 把错误打开 display_errorsOn开始安装 检查环境 填写数据库信息 和ssl信息,如果ssl信息没有,则可以忽略 填写域名和后台地址&#xff0…

已解决丨怎么快速的让IP地址实现HTTPS访问?

要快速让IP地址实现HTTPS访问,可以遵循以下简洁步骤: 1. 确认公网IP地址 确保你拥有一个固定的公网IP地址,因为HTTPS访问需要通过互联网上的公网IP进行。 2. 选择证书颁发机构(CA) 选择一个受信任的证书颁发机构&a…

波特率和比特率的区别联系【理解】

波特率(Baud rate):表示单位时间内载波调制状态变化的次数 ,单位为波特(Baud); 【值得注意的是】单位“波特”本身就已经是代表每秒的调制数,不能用“波特每秒”(Baud per second)为…

大疆创新2025校招内推

大疆2025校招-内推 一、我们是谁? 大疆研发软件团队,致力于把大疆的硬件设备和大疆用户紧密连接在一起,我们的使命是“让机器有温度,让数据会说话”。 在消费和手持团队,我们的温度来自于激发用户灵感并助力用户创作…

代理服务器是什么?它的工作原理是什么?

在浩瀚的网络世界中,代理服务器作为连接用户与目标服务器的桥梁,扮演着至关重要的角色。它不仅能够优化网络访问速度,还能增强数据安全性,保护用户隐私。那么,代理服务器究竟是如何工作的呢?本文将深入解析…

【C++修炼之路 第五章】模拟实现 string 类

开发日志: /* * 开发日志 * 1、基本 string 类框架:string 域(自定义命名空间) 私有成员 * 2、基本函数:一般构造 拷贝构造 析构 以下分组实现一些 string 类常见常用的函数 * 3、基本访问操作:c_st…

10 VUE Element

文章目录 VUE1、概述2、快速入门3、Vue 指令4、生命周期5、案例 Elemant1、快速入门2、Element 布局3、常用组件-案例 VUE 1、概述 Vue 是一套前端框架,免除原生JavaScript中的DOM操作,简化书写基于MVVM(Model-View-ViewModel)思想,实现数据…

EB Tresos 基于S32K3芯片 ICU模块实现gpio外部中断配置[后续更新实现icu模块的其他功能]

环境:eb tresos 27.0.1 port 模块配置: 选择一个具有erq功能的引脚并配置为erq功能。如下我选择的是 PTB0 -EIRQ[8] - SIUL2_EXT_IRQ_8_15_ISR Platform 模块配置 在这个模块中配置中断的开关以及中断句柄 ICU模块配置 具体配置参考博客:…

一文总结代理:代理模式、代理服务器

概述 代理在计算机编程领域,是一个很通用的概念,包括:代理设计模式,代理服务器等。 代理类持有具体实现类的实例,将在代理类上的操作转化为实例上方法的调用。为某个对象提供一个代理,以控制对这个对象的…

本地部署Graphhopper路径规划服务(graphhopper.sh启动版)

文章目录 文章参考源码获取一、配置Java环境变量二、配置Maven环境变量三、构建graphhopper步骤1. 下载数据2. 配置graphhopper配置文件config-example.yml3. 在项目中启动命令行执行./graphhopper.sh build3.1|、遇到的问题3.1.1、pom.xml中front-maven-plugin-无法下载npm6.1…