简单学习 --> 数据加密

加密/加盐

存储在数据库里的数据都是明文的, 如果数据库被盗, 数据就被泄露了;

所以要进行加密

密码算法

  1. 对称密码算法 : 加密和解密的算法用同一个; x明文,y密文 , f() 加密算法 == > y = f(x) , x = f(y) ; 常见: AES , DES

  2. 非对称密码算法 : 公钥和私钥 ; ==> 使用公钥进行加密 , 使用私钥进行解密 ; 常见: REA , DSA

  3. 摘要算法 : 把任意长度的输入数据,转换成固定长度的输出数据 ; (不可逆的 ,加密后无法恢复) ; 常用: MD5 , CRC

MD5

1.MD5加密后如何验证

同一个 明文 经过同样的摘要算法,得到的结果是一样的 ;

验证方法 : 验证摘要算法处理结果, 只要两个加密后的密文 是 一样的 , 那么 明文相同

2.为何网站可以解密MD5

因为同一个明文,进行MD5加密后的 密文都是一样的, 所以 可以根据这个把常见的明文和密文保存起来 ;

盐值 salt

当 一个 简单的明文 , 很容易 被解密(被列举) 出来 , 那么 通过加 盐值 ,来实现 让明文变成复杂的明文

明文 + salt = 复杂的明文 此时在进行MD5加密 ==> 密文 , 这样的密文就不容易被解密

salt 要保证是 随机盐值

随机盐值怎么验证
  1. 数据库上存储的信息是 ==> 加上随机盐值后的密文

  2. 待验证的明文(用户输入的数据), 验证方式: 待验证的明文 + 随机验证 , 进行加密后 和 数据库的密文进行对比

加密的实现流程
1.用户注册
  1. 生成随机盐值

  2. 用户明文密码+随机盐值, 通过MD5加密

  3. 保存随机盐值, 和密文

2.用户登录(校验)
  1. 获取用户的随机盐值

  2. 待验证的明文 + 第一步获取的盐值, 进行MD5加密

  3. 判断 第二步加密后的密文 和 数据库保存的密文是否一致 ;

加密实现 (SecurityUitls 安全实现)

DigestUtils (MD5加密)

spring提供的MD5加密方式 加密成 密文 ("32位的小写密文")

UUID (获取盐值 salt)

UUID是 JDK提供的 ,在util包下 , 用来获取一段 随机字符串 , 这个字符串很长 (36位的小写字符串, 如果把-去掉就是32位字符串, 长得和 上面的MD5加密后的字符串一模一样)

(UUID的用法例子: 购物平台在用户未登录的时候,也可以根据用户的喜好来进行推荐, 用的就是UUID , UUID作为和user_id对应的,因为UUID的字符串基本上是不重复的, 通过把UUID和用户的设备进行绑定, 就可以实现类似于user_id的方式来区分用户)

存储盐值和密文存储

盐值去掉"-" 后就和加密后的密文一样了 , 把盐值和密文存在一起, 黑客入侵我们数据库拿到的数据,就不好破解

因为密文和盐值存储的方式有很多种: 可以 密文里插入一点盐值, 盐值里加插入一点密文 ....

非常多的方法, 进行存储, 这样破解数据的难度都会非常大 ;

加密实现

  1. 密文的内容 = (盐值+明文) MD5加密

  2. 存放到数据库的数据 = 盐值 + 密文 (可以专门设置复杂的方式存放)

验证 verify

验证加密:

  1. 拿到 数据库存储的 数据 : sqlPassword

  2. 从 数据库数据里获取到盐值 : salt (通过存放时的方式获取到盐值)

  3. 将 salt 和 用户输入的密码 进行加密: securityPassword

  4. 盐值+securityPassword 拼接(拼接的方式,也是 存放数据库时存放的方式) : finalPassword

  5. 把 最后得到的数据 finalPassword 和 数据库里存储的数据 sqlPassword ,进行对比, 如果相同,则表示相同

相关推荐
艾莉丝努力练剑3 小时前
【AI接入大模型SDK】ChatSDK示例验证
人工智能·学习·面试·大模型·sdk
葡萄成熟时 !8 小时前
JAVA 常用API学习笔记
java·笔记·学习
Rain的Java大神之路9 小时前
介绍一下分布式事务
java·分布式·后端·spring·spring cloud·架构·springcloud
oradh10 小时前
Oracle闪回技术操作总结
数据库·oracle·oracle闪回技术操作总结·oracle闪回·flashback技术
吴声子夜歌10 小时前
Java面试题——基础(一)
java·开发语言
别动我齐刘海10 小时前
机器人运动控制学习2——基础进阶
c++·人工智能·神经网络·学习·目标检测·机器学习·机器人
南城以南溫暖如初14710 小时前
外卖CPS实战指南:从技术选型到运营落地全流程解析
java·spring boot·mysql·架构·vue
ltl10 小时前
RocksDB 并发 Compaction 与 Rate Limiter
数据库
傻啦嘿哟11 小时前
英雄联盟皮肤爬虫:爬取全皮肤价格与特效,做比价工具
java·c++·爬虫
码匠许师傅12 小时前
【C++ 面试真题】24. 聊聊 C++ 的时间日期处理
java·c++·面试