【密码加密原则一】

目录

1. 什么是密码加密

2. 典型的消息摘要算法


1. 什么是密码加密

用户在使用软件时所提交的密码,不应该被记录下来,如果将用户的密码记录,这是不安全的做法!

当用户提交注册信息时,密码必须被记录下来,为了保障密码安全,必须对用户提交的原始密码进行加密处理!

用户提交的原始密码通常可以称之为“明文密码”,或“密码的原文”,经过编码处理后,得到的结果通常是不能被直接识别的另一个数据,称之为“密文”。

当尝试对密码进行加密处理时,应该使用成熟的、已有的算法!

 需要注意:当需要将密码进行加密并存储下来时(例如存储到数据库中),不可以使用“加密算法”!因为所有的“加密算法”都是可以逆向运算的,即根据密文可以逆向运算得到原文,这种算法通常是用于保障传输过程的安全,并不用于保障存储下来的数据的不可逆向运算!

2. 典型的消息摘要算法

对于将要存储下来的密码,一般使用“消息摘要算法”进行处理,这类算法是不可以逆向运算的!

消息摘要算法有以下特点:

  • 使用同样的算法,使用同样的消息,运算得到的摘要必然相同
  • 使用同样的算法,无论使用什么消息,运算得到的摘要的长度是相同的
  • 使用同样的算法,使用不同的消息,运算得到的摘要极大概率不会相同

典型的消息摘要算法有:

  • SHA家族(Secure Hash Algorithm)
    • SHA-1(160位算法)
    • SHA-256(256位算法)
    • SHA-384(384位算法)
    • SHA-512(512位算法)
  • MD系列(Message Digest)
    • MD2(128位算法)
    • MD4(128位算法)
    • MD5(128位算法)

在Spring Boot项目中,依赖项中已经包含了DigestUtils工具类,此工具类有便利的、使用MD5算法的API:

@Test
void encode() {
    String rawPassword = "123456";
    String encodedPassword = DigestUtils.md5DigestAsHex(
            rawPassword.getBytes());
    System.out.println("原文:" + rawPassword);
    System.out.println("密文:" + encodedPassword);
}

由于消息摘要算法中“消息”和“摘要”是固定对应的(相同的消息,摘要必然相同),在网络上也有许多平台可以实现消息摘要的“破解”。

这些“破解”平台能够收录的消息与摘要的对应关系是非常有限的,所以,在设计软件时,应该要求用户(软件的使用者)使用安全强度更高的密码!

另外,还应该对密码进行“加盐”处理,即在编码过程中,使用“盐值”。

盐值是一个自行指定值的字符串,应该被用于编码过程,但具体使用方式并没有统一的规定。

使用盐的示例:

@Test
void encode() {
    String salt = "3r3HDSLQrAqweHKFwyJfDtt4876oruiSJF4glui"; // 盐值
    String rawPassword = "123456";
    String encodedPassword = DigestUtils.md5DigestAsHex(
            (rawPassword + salt).getBytes());
    System.out.println("原文:" + rawPassword);
    System.out.println("密文:" + encodedPassword);
}

个人主页:居然天上楼

感谢你这么可爱帅气还这么热爱学习~~

人生海海,山山而川

你的点赞👍 收藏⭐ 留言📝 加关注✅

是对我最大的支持与鞭策

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

居然天上楼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值