简单学习 --> 数据加密

加密/加盐

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

所以要进行加密

密码算法

  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 ,进行对比, 如果相同,则表示相同

相关推荐
欢呼的太阳14 小时前
数据库设计Step by Step (10)——范式化
服务器·数据库·oracle
折哥的程序人生 · 物流技术专研14 小时前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
千寻xun14 小时前
一、理论篇-NVME协议学习笔记
笔记·学习·fpga开发·nvme ssd·nvme协议
researcher-Jiang14 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
喜欢的名字被抢了15 小时前
MySQL基础入门:从零理解数据库与SQL
数据库·mysql·教程
Elastic 中国社区官方博客16 小时前
如何比较两个 Elasticsearch 索引并找出缺失的文档
大数据·运维·数据库·elasticsearch·搜索引擎
西门吹-禅16 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_16 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
儒雅的大叔16 小时前
MySQL数据库InnoDB数据恢复工具使用总结
数据库·mysql·adb
weixin_BYSJ198717 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php