• 【密码加密原则】


    目录

    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:

    1. @Test
    2. void encode() {
    3. String rawPassword = "123456";
    4. String encodedPassword = DigestUtils.md5DigestAsHex(
    5. rawPassword.getBytes());
    6. System.out.println("原文:" + rawPassword);
    7. System.out.println("密文:" + encodedPassword);
    8. }

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

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

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

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

    使用盐的示例:

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

    个人主页:居然天上楼

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

    人生海海,山山而川

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

    是对我最大的支持与鞭策

  • 相关阅读:
    六、鼎捷T100应收账款之应收帐款核销
    leetcode88. 合并两个有序数组
    计算机网络4小时速成:网络层,虚电路和数据包服务,ipv4,ABC类地址,地址解析协议ARP,子网掩码,ICMP忘记控制报文协议,路由选择协议,路由器
    mfc140u.dll丢失怎么修复?4种亲测有效的方法分享
    重学Elasticsearch第5章 : 过滤查询、聚合查询
    mysql中的这些日志,你都知道吗?
    【C++】单链表(入门级别最简单的无头单向非循环表)
    Spring的两种事务处理方式及五大隔离级别
    【尚跑】马拉松冬训指南
    Android 内存分析
  • 原文地址:https://blog.csdn.net/weixin_72612071/article/details/128140190