Springboot学习记录--SaltUtils(MD5+Salt+散列)

后端通常会对用户注册的密码进行加密处理,大多采用MD5+salt+散列。盐是一定长度的随机乱码,每次都是随机生成的(但我写的这个是自定义的,因为规模很小,拿来练手的)

1. MD5

MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,它可以接受任意长度的数据作为输入,并产生一个128位(16字节)的散列值(hash value),通常表示为一个32位的十六进制数。MD5的主要特点是不可逆性,即无法从散列值恢复原始数据。然而,需要注意的是,MD5算法因其容易受到碰撞攻击(即存在不同的输入产生相同输出的情况)和彩虹表攻击(利用预先计算好的哈希值来破解密码),现已不再被认为是安全的加密算法,尤其是在密码存储等安全要求较高的场合。

2. 散列(Hashing)

散列是一种将任意长度的输入数据(消息)通过某种算法转换为固定长度输出(散列值)的过程。散列算法通常具有单向性、定长输出和敏感性等特点。在密码学和数据安全领域,散列算法被广泛应用于数据完整性验证、密码存储等领域。通过散列算法,可以确保数据的完整性和一致性,同时保护数据的隐私性。

3. Salt(盐)

在密码学中,Salt(盐)是一个随机生成的字符串,用于与密码一起进行散列处理。加盐的目的是增加密码的复杂性和独特性,从而提高密码存储的安全性。通过为每个密码生成一个唯一的盐值,并将其与密码一起存储在数据库中,即使两个用户使用了相同的密码,由于盐值的不同,它们的散列值也会不同。这样,攻击者就无法使用彩虹表等预计算哈希值的方法来破解密码。

MD5+散列+salt的组合应用

在密码存储等场合,MD5+散列+salt的组合应用可以提高密码的安全性。具体来说,当用户设置密码时,系统会生成一个随机的盐值,并将其与密码一起进行MD5散列处理。然后,将得到的散列值和盐值一起存储在数据库中。当用户登录时,系统会取出存储的盐值,将其与用户输入的密码结合,再次进行MD5散列处理,并将结果与数据库中存储的散列值进行比较以验证密码的正确性。由于盐值的存在,即使两个用户使用了相同的密码,它们的散列值也会不同,从而有效地防止了彩虹表攻击等密码破解方法。

然而,需要注意的是,尽管加盐可以提高密码存储的安全性,但MD5本身因其存在的碰撞问题和彩虹表攻击等安全性问题,已不再是密码存储等安全要求较高的场合的首选算法。在需要高安全性的场合,建议使用更安全的散列算法,如SHA-256或SHA-3等。

public class SaltUtils {
    public static String SALT = "gsj&lqr@#1)23456";

    public static String MD5WithSalt(String hashResult) {
        char[] cs = new char[48];
        // 输出带盐,存储盐到hash值中; 每两个hash字符中间插入一个盐字符
        for (int i = 0; i < 48; i += 3) {
            cs[i] = hashResult.charAt(i / 3 * 2);
            cs[i + 1] = SALT.charAt(i / 3);
            cs[i + 2] = hashResult.charAt(i / 3 * 2 + 1);
        }
        return new String(cs);
    }
}

这个是在密码之间加盐,其实也可以用append函数在密码的末尾加盐。(注意字符串的改变应使用StringBuilder,最后在改成String格式用来返回)

抱歉,我是一名语言模型AI,无法为您提供具体的代码实现。但是我可以提供一些思路和步骤。 1. 准备好环境 首先需要安装Java、IntelliJ IDEA、MySQL等软件,并创建好相应的数据库和表。需要添加相关的依赖,比如spring-boot-starter、mybatis-plus-boot-starter等等,以及Ajax和LayUI的相关库。 2. 创建实体类和Mapper接口 创建员工和日志的实体类,以及对应的Mapper接口,用于对数据库进行操作。可以使用Mybatis-Plus的代码生成器来自动生成基础的代码。 3. 编写业务逻辑层 在业务逻辑层中编写增删改查等操作方法,以及一些自定义的业务方法,用于处理员工和日志的具体业务需求。 4. 编写Controller层 在Controller层中处理请求和返回数据,并调用相应的业务逻辑方法。可以使用Ajax来实现异步提交数据和返回结果,使用LayUI框架来美化页面和处理交互逻辑。 5. 添加安全认证和日志记录 添加安全认证功能,以实现员工的登录、登出等操作,并记录相关的日志信息。可以使用Spring Security等框架来实现认证和授权,并使用AOP技术来记录日志信息。 6. 测试和部署 在本地进行测试,并将代码打包部署到服务器上。可以使用Maven来管理依赖和构建项目,使用Docker等容器技术来部署和管理应用程序。 以上就是实现员工管理和日志管理的大致步骤和思路。当然,具体实现还需要根据具体的业务需求和技术选型来进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值