消息摘要算法与密码加密

  • 在Spring Boot项目中,提供了DigestUtils工具类,可以轻松实现“使用MD5算法”进行运算,实现将原始密码进行加密,得到一个加密结果。
  • 加密防范对象通常是内部员工!
  • 对密码进行加密处理的时候,不可以使用加密算法。因为所有的加密算法都是可以解密的。加密算法的核心价值是保证数据在传输过程中是安全的(因为虽然所有加密算法既可以加密,也可以解密,但是解密需要时间,传输的时间比较短)
  • 对需要存储的密码进行加密存储的时候,应该使用消息摘要算法,其本质是一种哈希算法,是不可逆的运算。
  • 消息摘要算法的典型特征:
  1. 消息相同则摘要相同
  2. 无论消息长度如何,摘要的长度是固定的(同一种算法)
  3. 消息不同,摘要几乎不同
  • 常见的消息摘要算法有:
  1. MD系列:MD2(128bit)、MD4(128bit)、MD5(128bit)

  2. SHA家族:SHA-1(160bit)、SHA-256(256bit)、SHA-384(384bit)、SHA-512(512bit)

          注意:如果使用的是MD5算法,运算结果是128个二进制组成(MD5算法的运算结果的种类有2的128次方种,即:340282366920938463463374607431768211456 ),通常,会转换成十六进制表示--32位的十六进制。因为消息算法在运算的时候会丢失一部分数据,所以消息算法都是不可逆的,任何“破解”都不会是“根据密文计算得到原文”的。有一些平台记录了简单的明文密文的对应关系的数据库,以实现“根据密文查询出原文”的效果,但是,只要原文足够复杂(8位长度以上),这些平台不可能收录其对应关系!

    为了保证密码原文的复杂性,可以使用“盐”--会做为运算数据的组件部分之一,这样,即使原始密码很简单,原始数据也会比较复杂,也不可能被平台收录如下,原始数据变成“123456jhfdiu78543hjfdo8 ”:

String rawPassword = "123456";
String salt = "jhfdiu78543hjfdo8";
String encodedPassword = DigestUtils.md5DigestAsHex((rawPassword + salt).getBytes());
  • 保障用户密码的安全,可行的做法:
  1. 要求用户密码强度高(密码长,包含字符类型多样化)
  2. 加盐(盐越复杂越好--但是没必要过于复杂,盐也可以随机)
  3. 循环加密(将第一次运算后得到的密文作为原文,循环多次)
  4. 综合以上做法
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

�欢快↑㎡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值