当前位置: 首页 > news >正文

电脑上做免费网站教程/百度公司地址在哪里

电脑上做免费网站教程,百度公司地址在哪里,天猫网页版,网站备案查询网址文章目录1. 前言2. 密码加密1. 前言 本文 主要实现 对密码进行加密 ,因为 使用 md5 容易被穷举 (彩虹表) 而破解 ,使用 spring security 框架又太大了 (杀鸡用牛刀) 。   所以本文 就自己实现一个密码加密 . 2. 密码加密 这里我们通过 加盐是方式 来 对…

文章目录

  • 1. 前言
  • 2. 密码加密

1. 前言

本文 主要实现 对密码进行加密 ,因为 使用 md5 容易被穷举 (彩虹表) 而破解 ,使用 spring security 框架又太大了 (杀鸡用牛刀) 。

所以本文 就自己实现一个密码加密 .

2. 密码加密

这里我们通过 加盐是方式 来 对密码进行加密 .

加盐 通常分为两部分 :

  1. 盐值 : 通常使用随机数
  2. 加密数据


将盐值与加密数据合在一起 就是 加盐数据了 , 加盐数据通常来说是安全的


这里我们 盐值 是 随机的 每次加盐的数字都是不同的,这里通过穷举 来 破解我们的数据 假设破解 一条数据 花费的时间 1 天 , 我们 有 1 千w 个数据, 一个数据

是一天 , 那么 1 千 w 个数 , 全部破解 时间是非常多的 .


这里成本大于利益 , 那么谁去破解呢 , 所以这样做 我们的密码 就是安全的 .


知道加盐 , 下面就来自己实现一个加盐的方法

  1. 加密 : 随机盐 + $ + 最终加密密码
  2. 解密 : 先通过 $ 进行分割 , 得到随机盐 + 最终密码 ,然后通过 md5 对 新输入的密码 与 得到的随机盐 进行加密 , 将得到的 新的加密密码 和 之前分割得到的 最终密码 进行对比 如果 相等 那么 就是相同的密码 返回 true,如果不相等 就是不同的密码 返回 false


代码实现 :

这里我采用 的 是 使用 hutool 中的 MD5 进行 加密 的 所以需要引入 依赖

  <!--        添加 hutool --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.12</version></dependency>


创建一个 PasswordUtil , 在这个类里面完成我们的加密和 解密 .

package com.example.usermanager.tools;import cn.hutool.core.util.IdUtil;
import cn.hutool.crypto.SecureUtil;
import org.springframework.util.StringUtils;import java.util.UUID;/*** 密码工具类* 1. 加密 (加盐)* 2. 解密*/public class PasswordUtil {/*** 加密 (加盐)** @param password* @return*///         生成的 UUID 带有 - : UUID.randomUUID();public static String encrypt(String password) {// 生成 uuid 不加 - 的 .// 随机盐值String salt = IdUtil.simpleUUID();// 密码 (随机盐值 + 密码)String finalPassword = SecureUtil.md5(salt + password);return salt + "$" + finalPassword;}/*** 解密** @param password 要验证的密码 (未加密)* @return 数据库中的加了盐值的密码*/public static boolean decrypt(String password, String securePassword) {boolean result = false;if (StringUtils.hasLength(password) && StringUtils.hasLength(securePassword)) {if (securePassword.length() == 65 && securePassword.contains("$")) {// 注意 : $ 是特殊字符 使用 split 需要转义String[] securePasswordArr = securePassword.split("\\$");// 盐值String salt = securePasswordArr[0];// 根据盐值加密的密码String finalPassword = securePasswordArr[1];// 使用同样的加密算法 和 随机盐值生成最终的加密的密码password = SecureUtil.md5(salt + password);// 进行对比if (finalPassword.equals(password)) {result = true;}}}return result;}public static void main(String[] args) {String password = "123456";String dbPassword = PasswordUtil.encrypt(password);System.out.println("加密密码 " + dbPassword);boolean result = PasswordUtil.decrypt("123456",dbPassword);String password2 = "123456789";boolean result2 = PasswordUtil.decrypt(password2,dbPassword);System.out.println(result);System.out.println(result2);}
}


效果 :

在这里插入图片描述

扩展 : 这里我们可以 对 加密密码 进行一个对称加密 ,对称加密后得到一个 32 位 数据 , 我们的程序可以通过 公钥 对 32 数据 还原 ,然后再通过我们写的 decrypt 进行 解密 .


这里主要是一个小功能, 可以将这个加密 放在我们的项目中 .

相关文章:

加密功能实现

文章目录1. 前言2. 密码加密1. 前言 本文 主要实现 对密码进行加密 &#xff0c;因为 使用 md5 容易被穷举 (彩虹表) 而破解 &#xff0c;使用 spring security 框架又太大了 (杀鸡用牛刀) 。   所以本文 就自己实现一个密码加密 . 2. 密码加密 这里我们通过 加盐是方式 来 对…...

大数据项目实战之数据仓库:用户行为采集平台——第1章 数据仓库概念

第1章 数据仓库概念 数据仓库&#xff08;Data Warehouse&#xff09;&#xff0c;是为企业制定决策&#xff0c;提供数据支持的。可以帮助企业改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括&#xff1a;业务数据、用户行为数据和爬虫数据等 业务数据&#xf…...

NTP对时服务器(NTP电子时钟)在生物制药业应用

NTP对时服务器&#xff08;NTP电子时钟&#xff09;在生物制药业应用 NTP对时服务器&#xff08;NTP电子时钟&#xff09;在生物制药业应用 8.1 系统概述 时钟系统为生物制药厂网络控制中心调度员、车场值班员及各部门工作人员提供统一的标准时间信息&#xff0c;也为本工程其它…...

JPA 之 QueryDSL-JPA 使用指南

Querydsl-JPA 框架&#xff08;推荐&#xff09; 官网&#xff1a;传送门 参考&#xff1a; JPA整合Querydsl入门篇SpringBoot环境下QueryDSL-JPA的入门及进阶 概述及依赖、插件、生成查询实体 1.Querydsl支持代码自动完成&#xff0c;因为是纯Java API编写查询&#xff0…...

如何找回回收站删除的视频?这三种方法可以试试

在使用电脑过程中&#xff0c;我们可能会误删重要的文件&#xff0c;特别是影音文件。在这样的情况下&#xff0c;我们可以从计算机的回收站中找回已经被删除的视频。但是有时候&#xff0c;我们可能会不小心清空回收站&#xff0c;这时候就需要一些技巧来恢复回收站删除的视频…...

FPGA_边沿监测理解

一、简易频率计设计中为什么一定要获取下降沿?gate_a:实际闸门信号gate_a_stand:将实际闸门信号打一拍之后的信号gate_a_fall_s:下降沿标志信号cnt_clk_stand: Y值&#xff0c;即在实际闸门信号下&#xff0c;标准时钟信号的周期个数cnt_clk_stand_reg:保存Y值的寄存器核心问题…...

41 42Ping-Pong操作

提高电路吞吐率的结构——Ping-Pong操作 1.Ping-Pong操作原理 作用&#xff1a;为了让两个不匹配的模块进行对接&#xff0c;并且在对接的过程中让这两个模块能够同时工作&#xff0c;提高数据处理的吞吐率&#xff08;也称throughput效能&#xff09; 常见的不匹配&#xff1…...

保护你的数据安全,了解网络安全法!

网络安全法是中国自2017年6月1日起实施的一项法律&#xff0c;旨在保障网络安全和信息安全&#xff0c;维护国家安全和社会稳定。网络安全法覆盖了众多方面&#xff0c;包括网络基础设施安全、网络运营安全、个人信息保护、网络安全监管等&#xff0c;具有重要的法律意义和社会…...

什么是CatGPT-使用效果如何-

个人使用效果&#xff0c;评分优&#xff0c;足以满足教学和填表。程序媛借助CatGPT&#xff08;ChatGPT更佳&#xff09;&#xff0c;基本上可以秒杀不用此类工具的程序猿&#xff08;男&#xff09;&#xff01;&#xff01;&#xff01;问&#xff1a;为什么使用AIGC能大幅度…...

【MySQL】第17章_触发器

第17章_触发器 在实际开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;有 2 个或者多个相互关联的表&#xff0c;如商品信息和库存信息分别存放在 2 个不同的数据表中&#xff0c;我们在添加一条新商品记录的时候&#xff0c;为了保证数据的完整性&#xff0c;必须同时…...

【前端】一个更底层库-React基础知识点第2篇

目录属性状态PROPSPROP VALIDATIONSTATEFORMCONTROLLED COMPONENTSMIXINCOMPONENT APICOMPONENT LIFECYCLETOP API上一篇文章也是React基础知识点&#xff0c;了解到了React是什么&#xff1f;为什么要使用React&#xff1f;还知道了JSX概述&#xff0c;JSX嵌入变量&#xff0c…...

GIT基础常用命令-1

git基础常用命令-11.git简介及配置1.1 git简介1.2 git配置config1.2.1 查看配置git config1.2.2 配置设置1.2.3 获取帮助git help2 GIT基础常用命令2.1 获取镜像仓库2.1.1 git init2.1.2 git clone2.2 本地仓库常用命令2.2.1 git status2.2.2 git add2.2.3 git diff2.2.4 git c…...

02_qml_简介

qml介绍: QML是一种描述用户界面的声明式语言。它将用户界面分解成一些更小的元素,这些元素能够结合成一个组件。QML语言描述了用户界面元素的形状和行为。用户界面能够使用JavaScript来提供修饰,或者增加更加复杂的逻辑。从这个角度来看它遵循HTML-JavaScript模式,但QML是…...

小程序项目在hbuilder里面给它打包成app

小程序项目临时有些登录需求&#xff0c;需要把&#xff08;小程序某些功能通过条件编译让它显示到app上&#xff09;小程序打包成app的话就必须需要一个打包的证书&#xff0c;证书的话就要去重新生成&#xff0c;苹果电脑可以去自动生成证书&#xff0c;平时是用windows进行开…...

linux安装pycharm

linux安装pycharm1.下载相关软件包2. 安装步骤2.1 解压文件2.2 开启命令2.4 创建快捷方式官网链接 https://www.jetbrains.com/pycharm/download/#sectionlinux 1.下载相关软件包 找到自己下载的版本下载 2. 安装步骤 2.1 解压文件 进入压缩包路径 解压文件【我指定了解…...

seata1.5.2使用从零快速上手(提供代码与安装包)

1.软件准备&#xff1a; 1.1 seata1.5.2 官网下载&#xff1a;地址:http://seata.io/zh-cn/ server源码:https://github.com/seata/seata 百度云下载&#xff08;建议&#xff09;: 百度下载 链接&#xff1a;https://pan.baidu.com/s/1eilbSI0YdmupHYI7FroTsw 提取码&…...

我的机器学习之路

名字比较大&#xff0c;就好比大麻袋&#xff0c;啥都可以往里装。 如果说人生就像旅行&#xff0c;那么通往不同风景必定是要由不同的路抵达的。 风景无穷尽&#xff0c;人生却有涯。 15年的时候也写过类似的一篇文章&#xff0c;可以叫做大数据之大路和机器学习的岔路。现在…...

react-swipeable-views轮播图实现下方的切换点控制组件

本文是react通过react-swipeable-views创建公共轮播图组件的续文 上一文 我们创建了这样的一个轮播图组件 但我们已经看到的轮播图 下面都会有小点 展示当前所在的位置 但react-swipeable-views 并没有直接提供 我们需要自己去编写这个组件 我们在components下的 rotationCh…...

假如你知道这样的JVM

一. Java 类加载过程&#xff1f; Java 类加载需要经历一下 7 个过程&#xff1a; 加载 加载是类加载的第一个过程&#xff0c;在这个阶段&#xff0c;将完成一下三件事情&#xff1a; • 通过一个类的全限定名获取该类的二进制流。 • 将该二进制流中的静态存储结构转化为方法…...

MyBatis框架快速入门 - 基本使用

文章目录MyBatisMyBatis基本介绍MyBaits快速入门Mapper代理开发MyBatis配置文件MyBatis MyBatis基本介绍 什么是MyBatis? MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software found…...

Linux命令---文件管理

Linux chattr命令Linux chattr命令用于改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性&#xff0c;这些属性共有以下8种模式&#xff1a;a&#xff1a;让文件或目录仅供附加用途。b&#xff1a;不更新文件或目录的最后存取时间。c&#xff1a;将文件或目录…...

getDerivedStateFromProps和getSnapshotBeforeUpdate

getDerivedStateFromProps 和 getSnapshotBeforeUpdate 都是 React 中的生命周期方法&#xff0c;用于在组件渲染过程中进行状态管理和数据处理。 1、getDerivedStateFromProps getDerivedStateFromProps 方法是 React 16.3 新增的生命周期方法&#xff0c;用于在 props 发生…...

【Docker】如何在内网快速搭建docker并安装Oracle11g

文章目录前言一、下载docker静态二进制存档二、将解压完的二进制文件移到可执行文件目录下三、配置docker.service四、启动dockerd服务五、在有网络的环境生成Oracle11g镜像并导入5.1下载镜像Oracle11g镜像5.2将镜像打包5.3将镜像导入六、docker安装oracle11g6.1启动镜像6.2宿主…...

为啥用 时序数据库 TSDB

前言 其实我之前是不太了解时序数据库以及它相关的机制的&#xff0c;只是大概知晓它的用途。但因为公司的业务需求&#xff0c;我意外参与并主导了公司内部开源时序数据库influxdb的引擎改造&#xff0c;所以我也就顺理成章的成为时序数据库“从业者”。 造飞机的人需要时刻…...

Linux命令·cp

cp命令用来复制文件或者目录&#xff0c;是Linux系统中最常用的命令之一。一般情况下&#xff0c;shell会设置一个别名&#xff0c;在命令行下复制文件时&#xff0c;如果目标文件已经存在&#xff0c;就会询问是否覆盖&#xff0c;不管你是否使用-i参数。但是如果是在shell脚本…...

SAP GUI快捷键

快速调整字体大小 Ctrl &#xff0b; 鼠标滚轮 剪切一行 Ctrl Shift X 删除一行 Ctrl Shift L 复制一行 Ctrl Shift T 转成小写 Ctrl L 转成大写 Ctrl U 大小写相互转换 Ctrl K 取消 Ctrl Z 重做 Ctrl Y 原地复制一行 Ctrl D 一次性注释多行 …...

【Java】序列化与反序列化

1. 对象的序列化机制是什么&#xff1f; 对象序列化机制允许把内存中的Java对象转化成语平台无关的二进制流&#xff0c;从而允许把这种二进制流持久的保存在磁盘上&#xff0c;或通过网络将这种二进制流传输到另一个网络节点。 当其他程序获取了这种二进制流&#xff0c;就可…...

面向对象的使用

目录1. 类和对象的概念类对象类和对象的关系2. 定义简单的类(只包含方法&#xff09;3. 创建对象4. self参数5. 类的初始化方法在初始化方法内部定义属性在初始化方法内部接收参数定义属性6. 类的内置方法使用__del__ 方法__str__ 方法7. 身份运算符is 与 区别&#xff1a;8. …...

LPDDR4x 的 学习总结(3) - SDRAM基本功能

上一节,我们重点介绍了array的存储结构。 本节介绍array周边的电路,对DDR的基本读写操作的相关功能模块的理解。 即通过哪些模块可以实现对ddr的基本读写。最简化的方式是把存储操作理解为行列选择&#xff0c;拆分为横竖两个纬度&#xff0c;最终实现对arrary进行读写。横向…...

设计模式(三)--适配器模式(Adapter Pattern)

将一个接口转换成客户希望的另一个接口&#xff0c;适配器模式使接口不兼容的那些类可以一起工作.比如我们日常开发中使用到的slf4j就使用了适配器模式&#xff0c;slf4j提供了一系列打日志的api,底层调用的是log4j或者logback来打日志&#xff0c;而作为调用者&#xff0c;不需…...