md5加密算法的使用

204 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情

 写web项目时经常会编写用户登录注册模块,用户提交的密码需要密文存储,来防止数据泄露后带来的账号安全问题,开发者无需考虑加密过程中使用的算法,可以直接使用一些成熟的密码加密算法,虽然可以进行逆向破解,本文并不对此进行讨论。

 一般使用消息摘要算法来对密码进行加密,消息摘要算法的特点如下:

  • 在原文相同的情况下使用消息摘要算法得到的数据一定相同。
  • 使用相同的消息摘要算法,无论原文长度是多少,得到的摘要数据长度是固定的。
  • 摘要数据相同,原文相同(也有例外)。

 加密也需要遵守加密规则:

  • 用户尽可能使用安全强度高的密码。
  • 使用盐值。
  • 使用多重加密。
  • 综合以上三点。

 以下是一个使用案例,使用SpringBoot开发web项目时如何使用md5加密:

private String getMd5Password(String password, String salt) {
        /*
         * 加密规则:
         * 1、无视原始密码的强度
         * 2、使用UUID作为盐值,在原始密码的左右两侧拼接
         * 3、循环加密3次
         */
        for (int i = 0; i < 3; i++) {
            password = DigestUtils.md5DigestAsHex((salt + password + salt).getBytes()).toUpperCase();
        }
        return password;
    }
}
String salt = UUID.randomUUID().toString().toUpperCase();

 一般可以在业务层来处理用户的密码加密问题,先使用UUID包的randomUUID()函数生成一组随机数,再使用toString()将数字转化成字符串,最后使用toUpperCase()函数将字母转成大写,这样就生成了一组较为复杂的盐值,这个值需要存储到数据库中,方便下次登陆时对用户密码进行比对。

 接下来使用这个盐值完成对用户密码的加密操作,在用户密码的首位拼接盐值,转化成字节数据,使用DigestUtils包下的Md5DigestAsHex方法来加密数据,将这个过程重复三次就会得到一个加密强度较强的密码。