【JavaEE进阶】-- 加密算法

在数据库中通常存放一些用户的隐私信息,这些隐私信息通常不可以将其明文存放:
1. 代码角度:代码bug漏洞可能会导致数据泄漏。
2. 管理角度:管理员有权限查看数据表的数据,有可能会直接泄漏表数据。

以登陆的场景来进行说明下面三种加密算法:

1. 对称加密

常见的对称加密方式:AES、3DES。

对称加密重要的是要有一个密钥

加密: 明文 + 密钥 得到一个加密结果。

登录时解密:

  1. 从数据库中获取到加密结果。
  2. 加密结果通过密钥解密得到明文。
  3. 对比用户输入的明文和解密出来的明文。

安全性:
密钥一般是写在代码中、配置项中、启动参数中,都有可能会造成密钥的泄漏。如果我们对称加密的密钥泄漏了被一些别有用心的人拿到,他可能会采用暴力的方式,使用包含所有字符串的表,通过我们的密钥进行加密得到一个结果表,通过结果表和数据库中的数据进行对比,就很容易得到这些隐私数据的明文。

在这里插入图片描述

2. HASH加密

常见的HASH加密有:MD5、SHA256。

HASH加密是不可逆的。意思就是通过HASH加密的结果不能解密出来明文。

**加密:**拿到明文通过HASH加密的方式得到一个加密结果,将这个结果存放到数据库中。

登录:

  1. 根据用户登陆时输入的明文进行HASH处理,生成一个加密结果1。
  2. 从库中获取加密结果2。
  3. 对比加密结果1和2。

安全性:
哈希算法是固定的,一个相同的字符串哈希出来的结果都是相同的。

那么使用hash算法生成一张结果表, 和数据库中的密文进行对比也很容易将其破解。

在这里插入图片描述

3. 加盐HASH

盐是什么: 对于后端来说,盐就是一个生成的固定长度的随机数。

加密:

  1. 根据明文进行HASH处理,得到加密结果。
  2. 生成盐。
  3. 加密结果和盐进行拼接。
  4. 将拼接后的加密结果和盐都存放到数据库中。

登录:

  1. 对用户输入的明文进行HASH,得到加密结果。
  2. 从库中获取盐。
  3. 加密结果和盐进行拼接,生成最终加密结果。
  4. 将最终加密结果和库中的加密结果进行对比。

安全性:
此时使用暴力破解的方式的成本就会变的非常高。

经过HASH得到彩虹表之后,还会有一张盐表,在进行暴力破解的时候,需要用彩虹表中的每一项和盐表中的所有项进行组合。

在这里插入图片描述

更加安全的方式:
可以在HASH加盐的基础上,对盐再进行一次哈希,或者将最终的HASH结果再进行一次HASH。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuckoo___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值