加盐加密——保障你的数据安全

news2024/9/29 13:19:53

目录

今日良言:理性和激情是生活不可或缺的调味品

一、加盐加密

1.普通密码的缺点

2.什么是加盐加密

3.加盐加密的过程

4.加盐加密的实现


今日良言:理性和激情是生活不可或缺的调味品

一、加盐加密

1.普通密码的缺点

在介绍加盐加密之前,先想想为什么普通密码的缺点是什么?

普通的密码不安全是因为它们通常很容易被猜到或破解。一个简单的密码可能只包含数字、字母或符号中的几个,这使得攻击者可以通过暴力破解或字典攻击来尝试猜测密码。此外,如果用户使用相同的密码来保护多个账户,那么一旦其中一个账户被攻破,攻击者就可以访问所有受影响的账户。

 密码安全的重要性不言而喻,所以说,如何提高用户密码的安全性就值得关注了。

通过加盐加密就可以提高密码的安全性。

2.什么是加盐加密

简单介绍一下什么是加盐加密:

密码加盐是一种增强密码安全性的方法,它将用户输入的明文密码与一个随机生成的字符串(称为盐)进行组合,形成一个新的密文密码。这个新的密文密码可以存储在数据库中,以便后续验证用户身份时使用。当用户输入密码时,应用程序会将密码与盐进行组合,然后再使用该组合来计算哈希值或摘要值。这样即使攻击者获取了加密后的密码,也无法直接还原出原始的明文密码。因为攻击者必须先破解哈希值或摘要值才能获取原始的密码。通过使用密码加盐技术,可以有效地提高密码的安全性,避免因为密码泄露而导致的安全问题。

 虽然进行加盐加密以后,密码安全性会提高,但是密码也不是绝对安全的,但是随着密码安全性的提高,破解成本也会提高,所以使用加盐加密还是非常有必要的。

3.加盐加密的过程

加盐加密的过程简单来说,可以分为以下三步:

1).用户输入明文密码,生成随机盐值。

2).使用md5,通过明文密码+盐值生成最终密码。

3).将随机盐值+自定义拼接规则+ 最终密码存入数据库。

加盐解密的过程简单来说,可以分为以下四步:

1).输入待检验的密码和数据库中的最终密码。

2).先进行参数检验。

3).通过自定义拼接规则,将最终密码分割成两部分(随机盐值+明文密码)。

4).验证分割得到的明文密码和待检验的密码是否相等。

4.加盐加密的实现

加盐加密和加盐解密的代码如下:

  /**
     * 加盐加密
     * @param password  初始密码
     * @return          加盐密码
     */
    public static String encrypt(String password) {
     // 1.生成随机盐值
        // 通过UUID生成唯一的数字作为随机盐值
        String salt = UUID.randomUUID().toString().replace("-","");// 顺便去掉 -
        // 2.根据初始密码 和 随机盐值 通过md5生成 加盐加密的密码      
        // StandardCharsets.UTF_8  设置编码格式
        String finalPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes(StandardCharsets.UTF_8));
        // 3.将盐值 和 加盐加密得到的密码一起返回(合并盐值和加盐密码)
        return salt +"$"+finalPassword;
    }
    /**
     * 加盐加密的方法重载
     * @param password  初始密码
     * @return          加盐密码
     */
    public static String encrypt(String password,String salt) {

        // 2.根据初始密码 和 随机盐值 通过md5生成 加盐加密的密码
        String finalPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes(StandardCharsets.UTF_8));
        // 3.将盐值 和 加盐加密得到的密码一起返回(合并盐值和加盐密码)
        // 这里的"$"是自定义的拼接规则,用于区分随机盐值和明文密码
        return salt +"$"+finalPassword;
    }
    /**
     * 加盐解密
     * @param password  初始密码
     * @param dbPassword 数据库中的密码
     * @return
     */
    public static boolean decrypt(String password,String dbPassword) {
        // 先进行参数判断
        // StringUtils.hasLength() 是Spring提供的可以判断传入的字符串是否为空和长度是否为0
        // 判端长度是否为65是因为:随机盐值是32位,通过md5生成的密码也是32位 $ 长度1位
        if (StringUtils.hasLength(password) && StringUtils.hasLength(dbPassword)
        && dbPassword.length() == 65 && dbPassword.contains("$")) {
            // 分割数据库中的密码
            String[] arr = dbPassword.split("\\$");
            // 得到盐值
            String salt = arr[0];
            // 将盐值和初始密码传入重载的加盐加密的方法,生成新的密码
            String finalPassword = encrypt(password,salt);
            // 比较待验证的密码和明文密码是否相等
            if (finalPassword.equals(dbPassword)) {
                return true;
            }
        }
        return false;
    }

效果展示:

首先原始密码是:123456.

然后将原始密码通过加盐加密,然后输入一个待验证的密码,进行比较:

密码输入错误,验证的代码:

输出结果:

密码输入正确,输出结果:

 以上就是加盐加密相关知识点。

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

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

相关文章

STM32F4_指针(单片机)

目录 前言 1. 计算机存储机制 2. 定义指针 2.1 指针操作 2.2 数组与指针 前言 指针(Pointer)是C语言的一个重要知识点,其使用灵活、功能强大,是C语言的灵魂。指针与底层硬件联系密切,使用指针可操作数据的地址,实现数据的间…

PreSumm模型

Text Summarization with Pretrained Encoders(PreSumm模型) 论文地址 摘要 在本文中,我们展示了如何在文本摘要中有效地应用BERT,并为提取性模型和抽象模型提出了一个通用框架。我们介绍了基于BERT的新颖文档级编码器&#xf…

安装VMware Workstation和虚拟机教程

一、VM简介   VMware Workstation中文版是一个“虚拟 PC”软件。它使你可以在一台机器上同时运行二个或更多 Windows、DOS、LINUX 系统。与“多启动”系统相比,VMWare 采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重…

iPad Pro “买后生产力” - 在iPad上远程连接服务器编程写代码【公网远程】

文章目录 前言视频教程1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7…

sprintboot logback高级特性使用

一、业务需求 日志级别的分类 日志的级别分为: trace:微量,少许的意思,级别最低info:普通的打印信息debug:需要调试时候的关键信息打印warn:警告,不影响使⽤,但需要注…

Socket(四)

文章目录 1. 服务器Socket简介2. 使用ServerSocket3. 用Socket写入服务器4. 关闭服务器Socket 1. 服务器Socket简介 博客Socket(一)~Socket(二)从客户端的角度讨论了Socket,客户端就是向监听连接的服务器打…

Git基本概念

Git基础 git 介绍git工作流程 git 介绍 1、git是什么:是目前世界上最先进的分布式版本控制系统 2、git的优势 ● 适合分布式开发、强调个体。 ● 公共服务器压力和数量都不会太大 ● 速度快、灵活 ● 任意两个开发者之间可以很容易的解决冲突 ● 离线工作 3、git能…

华为OD机试真题B卷 Java 实现【乱序整数序列两数之和绝对值最小】,附详细解题思路

一、题目描述 给定一个随机的整数(可能存在正整数和负整数)数组 nums,请你在该数组中找出两个数,其和的绝对值(|nums[x]nums[y]|)为最小值,并返回这个两个数(按从小到大返回)以及绝对值。 每种…

全志V3S嵌入式驱动开发(网卡驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 一开始上来就说网卡,好像有点不太对劲。这主要是因为如果开发板可以连接网络的话,可以帮我们节约很多的时间,开…

逍遥自在学C语言 | 揭开while循环的神秘面纱

前言 循环是一种重要的控制结构,可以使程序重复执行一段代码,直到满足特定条件为止。 在C语言中,while和do-while是两种常用的循环结构,本文将详细介绍这两种循环的用法。 一、人物简介 第一位闪亮登场,有请今后会一…

eclipse安装lombok插件

项目中遇到了一些实体类声明了属性,缺少get/set方法,但是类上使用了Getter 和 Setter注解,查了下是lombok插件的强大功能。 这里先不看lombok的功能,先看下eclipse安装lombok插件的过程。 1、 https://projectlombok.org/downlo…

三十五、数学知识——快速幂(反复平方法 + 快速幂求逆元)

快速幂算法主要内容 一、基本原理1、概念 暴力求解2、核心原理——反复平方法3、快速幂求逆元 二、Java、C语言模板实现三、例题题解 一、基本原理 1、概念 暴力求解 问题目标: 快速求出 a^k mod p 的结果,时间复杂度为 O(logk),其中 a,p…

华为OD机试真题B卷 Java 实现【字符串变换最小字符串】,附详细解题思路

一、题目描述 给定一个字符串s,最多只能进行一次变换,返回变换后能得到的最小字符串(按照字典序进行比较)。 变换规则:交换字符串中任意两个不同位置的字符。 二、输入描述 一串小写字母组成的字符串s。 三、输出…

人工智能-不确定性的量化

这一部分的重点内容有: 贝叶斯规则贝叶斯网络基于隐马尔可夫模型的概率推理 大概会有以下几种考察形式,有答案的历年期末考试题只解释一些注意的地方 贝叶斯网络-独立性 第二问答案很详细,第一问看↓ D-separation: 判断贝叶…

Stable-diffusion-webui 本地部署及使用

Stable-diffusion-webui 本地部署及使用 本地部署stable-diffusion-webui(windows)1.安装conda;2.创建conda env 和python 3.10.6;3.更新pip;4.安装cuda 11.8;5.克隆stable-diffusion-webui仓库 ;6.下载SD模型7.运行sd…

Dubbo配置

dubbo配置官网参考 1.配置原则 JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。 XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效。 Properties 最后&a…

【群智能算法改进】一种改进的蝴蝶优化算法 改进蝴蝶优化算法 改进BOA[1]【Matlab代码#35】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始蝴蝶优化算法2. 改进蝴蝶优化算法2.1 动态转换概率策略2.2 最优邻域扰动策略2.3 随机惯性权重策略 3. 部分代码展示4. 仿真结果展示5. 资源获取6. 参考文献 【获取资源请见文章第5节:资源获取】 1. 原…

React面试题和基础

React的特点: JSX它使用虚拟DOM ,减少 DOM 操作,提升性能。便于和其他平台集成。它可以进行服务器端渲染。单向数据流。组件化 双向数据绑定和单向数据流区别? 单向绑定的优点在于清晰可控,缺点则在于模板代码过多。…

第一部分-基础篇-第二章:PSTN、PBX及呼叫中心业务

文章目录 序言上一篇文章:2.1 PSTN业务2.1.1 POTS2.1.2 商务业务2.1.3 其他增值业务 2.2 PBX业务2.2.1 呼叫转移2.2.2 同组代答 2.3 PBX与中继线2.4 IP-PBX业务2.5 呼叫中心2.5.1 什么是呼叫中心2.5.2 呼叫中心的历史2.5.3 呼叫中心的分类1.交换机类型的呼叫中心2.板…

C++——string

作者:几冬雪来 时间:2023年5月29日 内容:C——string内容讲解 目录 前言: 1.string(续): 1.string::operator[]: 2.string:: length(): 3.string:: max_size(): 4.strin…