常见的加密方式以及自定义加密工具

常见的加密方式

1、对称加密(可逆)

加密操作:用户输入的明文+密钥得到加密的结果,加密结果存储到数据库中

解密操作:密文通过密钥进行解密得到明文

2、Hash加密(不可逆)

加密操作:明文通过哈希算法进行加密,加密后的密文存储到数据库中

验证密码操作:用户输入的明文通过同样的哈希算法进行加密,比对数据库中的密文,看是否一致

3、Hash+盐值加密(盐值就是随机数)

加密操作:明文通过哈希算法进行加密,得到加密结果,生成盐值,加密结果和盐值进行拼接得到最终加密结果

验证密码操作:用户输入的明文通过相同的哈希算法进行加密,得到加密结果,接着从数据库中获取盐值,加密结果和盐值经过相同的拼接方式得到最终结果,最终结果和数据库中存储的最终结果进行比对,看是否一致

自定义一个加密工具

public class SecurityUtil {/*** 加密*/public static String encrypt(String password) {if (!StringUtils.hasLength(password)) {throw new RuntimeException();}//1.生成盐值String salt = UUID.randomUUID().toString().replace("-", "");//把-替换成空字符//2.盐值+password(也可以使用其他的拼接规则,看心情)//3.对 盐值+password 进行加密 得到密文String securityPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes(StandardCharsets.UTF_8));//数据库中保存盐值 和 密文 得到64位16进制的数据return salt + securityPassword;}/*** 验证*/public static boolean verify(String inputPassword, String sqlPassword) {//参数校验if (!StringUtils.hasLength(inputPassword) || !StringUtils.hasLength(sqlPassword)) {return false;}if (sqlPassword.length() != 64) {return false;}//获取盐值String salt = sqlPassword.substring(0, 32);//得到32位的密文String securityPassword = DigestUtils.md5DigestAsHex((salt + inputPassword).getBytes(StandardCharsets.UTF_8));return sqlPassword.equals(salt + securityPassword);}
}

使用现成的工具

我们也可以使用现成的工具

首先引入依赖

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.25</version>
</dependency>

编写测试代码,这里我们对密码进行哈希算法+sha256的方法加密,对于电话号码,使用对称加密

@SpringBootTest
public class EncryptTest {//密码  hash sha256@Testvoid sha256Test() {String password = DigestUtil.sha256Hex("123456");System.out.println("sha256 hash 处理后的结果为");System.out.println(password);//8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92}//手机号 对称加密 aes@Testvoid aesTest() {//生成密钥,密钥长度必须是16字节或者24或者32byte[] key = "1234556789abcdef".getBytes(StandardCharsets.UTF_8);//生成aes对象AES aes = SecureUtil.aes(key);//加密String encrypted = aes.encryptHex("12345");System.out.println("经过aes加密后的结果为: " + encrypted);//解密String decryptStr = aes.decryptStr(encrypted);System.out.println("经过aes解密后的结果为:" + decryptStr);}}

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

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

相关文章

OpenStack基础架构

openstack是一套IaaS云的解决方案&#xff0c;是一个开源的云计算管理平台 每一台物理机上都会有一个nova服务器 虚拟化其实是在nova主机里启用的 COW技术&#xff1a; 这么来看&#xff0c;3个物理机上产生10个虚拟机&#xff0c;所以把服务分散到10个虚拟机上和分散到4个虚拟…

[论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…

如何实现各种类型的进度条

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了浮动按钮相关的内容&#xff0c;,本章回中将介绍进度条相关的Widget,闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 进度条是常用的组件之一&#xff0c;它主要用来显示某种动作的完成进度。Flu…

arcgis短整型变为长整型的处理方式

1.用QGIS的重构字段工具进行修改&#xff0c;亲测比arcgis的更改字段工具有用 2.更换低版本的arcgis10.2.2&#xff0c;亲测10.5和10.6都有这个毛病&#xff0c;虽然官方文档里面说的是10.6.1及以上 Arcgis10.2.2百度链接&#xff1a;https://pan.baidu.com/s/1HYTwgnBJsBug…

C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合

上一篇&#xff1a; C#&#xff0c;入门教程(03)——Visual Studio 2022编写彩色Hello World与动画效果https://blog.csdn.net/beijinghorn/article/details/123478581 C#&#xff0c;入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程https://blog.csdn.net…

【前端】Hexo 部署指南_hexo-deploy-git·GitHub Actions·Git Hooks

文章目录 前言基于 hexo-deploy-git基于 GitHub Actions基于 Git Hooks云平台端服务器端Git HooksSSHNginx 本地机端原理参考 前言 原文地址&#xff1a;https://blog.dwj601.cn/FrontEnd/Hexo/hexo-deployment/ #mermaid-svg-dfuCXqzZCx5I07IO {font-family:"trebuchet …

双指针+前缀和习题(一步步讲解)

前言&#xff1a;如果解决下面这几道题有些问题&#xff0c;或者即使看了我画的过程图也不理解的可以去看看我的上一篇文章&#xff0c;有可能会对你有帮助。 一、《数值元素的目标和》---来自AcWing 数组元素的目标和 给定两个升序排序的有序数组 A和 B&#xff0c;以及一个…

springboot 配置redis

环境配置 springboot3.4 redis5.0.14 redis准备参考下面文章 window下安装redis以及启动 redis客户端安装 引入依赖 <!-- 集成redis依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-…

TODO: Linux 中的装机硬件测试工具

TODO: Linux 中的装机硬件测试工具 装机时需要测一些硬件参数&#xff0c;希望选择一些跨平台的开源软件。 https://linux.do/t/topic/22175 https://www.baeldung-cn.com/linux/system-testing-tools https://blog.csdn.net/weixin_45358801/article/details/142701279

LabVIEW 太阳能光伏发电系统智能监控

本文介绍了基于 LabVIEW 的太阳能光伏发电监控系统的设计与实现&#xff0c;着重探讨了其硬件配置、软件架构以及系统的实现方法。该系统能够有效提高太阳能光伏发电的监控效率和精确性&#xff0c;实现了远程监控和数据管理的智能化。 ​ 项目背景 在当前能源紧张与环境污染…

doris:Broker Load

Broker Load 通过 MySQL API 发起&#xff0c;Doris 会根据 LOAD 语句中的信息&#xff0c;主动从数据源拉取数据。Broker Load 是一个异步导入方式&#xff0c;需要通过 SHOW LOAD 语句查看导入进度和导入结果。 Broker Load 适合源数据存储在远程存储系统&#xff0c;比如对…

WPF5-x名称空间

1. x名称空间2. x名称空间内容3. x名称空间内容分类 3.1. x:Name3.2. x:Key3.3. x:Class3.4. x:TypeArguments 4. 总结 1. x名称空间 “x名称空间”的x是映射XAML名称空间时给它取的名字&#xff08;取XAML的首字母&#xff09;&#xff0c;里面的成员&#xff08;如x:Class、…

网站HTTP改成HTTPS

您不仅需要知道如何将HTTP转换为HTTPS&#xff0c;还必须在不妨碍您的网站自成立以来建立的任何搜索排名权限的情况下进行切换。 为什么应该从HTTP转换为HTTPS&#xff1f; 与非安全HTTP于不同&#xff0c;安全域使用SSL&#xff08;安全套接字层&#xff09;服务器上的加密代…

煤矿场景下拖链检测数据集VOC+YOLO格式21407张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;21407 标注数量(xml文件个数)&#xff1a;21407 标注数量(txt文件个数)&#xff1a;2140…

栈和队列(C语言)

目录 数据结构之栈 定义 实现方式 基本功能实现 1&#xff09;定义&#xff0c;初始化栈 2&#xff09;入栈 3&#xff09;出栈 4&#xff09;获得栈顶元素 5)获得栈中有效元素个数 6&#xff09;检测栈是否为空 7&#xff09;销毁栈 数据结构之队列 定义 实现方…

Flutter鸿蒙化中的Plugin

Flutter鸿蒙化中的Plugin 前言鸿蒙项目内PluginFlutter端实现鸿蒙端实现创建Plugin的插件类注册Plugin 开发纯Dart的package为现有插件项目添加ohos平台支持创建插件配置插件编写插件内容 参考资料 前言 大家知道Flutter和鸿蒙通信方式和Flutter和其他平台通信方式都是一样的&…

探索JavaScript前端开发:开启交互之门的神奇钥匙(二)

目录 引言 四、事件处理 4.1 事件类型 4.2 事件监听器 五、实战案例&#xff1a;打造简易待办事项列表 5.1 HTML 结构搭建 5.2 JavaScript 功能实现 六、进阶拓展&#xff1a;异步编程与 Ajax 6.1 异步编程概念 6.2 Ajax 原理与使用 七、前沿框架&#xff1a;Vue.js …

DeepSeek-R1:性能对标 OpenAI,开源助力 AI 生态发展

DeepSeek-R1&#xff1a;性能对标 OpenAI&#xff0c;开源助力 AI 生态发展 在人工智能领域&#xff0c;大模型的竞争一直备受关注。最近&#xff0c;DeepSeek 团队发布了 DeepSeek-R1 模型&#xff0c;并开源了模型权重&#xff0c;这一举动无疑为 AI 领域带来了新的活力。今…

假期day1

第一天&#xff1a;请使用消息队列实现2个终端之间互相聊天 singal1.c #include <stdio.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include &l…

go-zero框架基本配置和错误码封装

文章目录 加载配置信息配置 env加载.env文件配置servicecontext 查询数据生成model文件执行查询操作 错误码封装配置拦截器错误码封装 接上一篇&#xff1a;《go-zero框架快速入门》 加载配置信息 配置 env 在项目根目录下新增 .env 文件&#xff0c;可以配置当前读取哪个环…