密码加盐的设计理念

密码加盐主要是针对用户的登录密码而言的,原始密码经过MD5(一
种Hash算法)加密后,一些固定长度的简单纯文本密码的密文也会被破解
出来。因为同一串字符的Hash加密后的密文是固定不变的。所以还是会被
破解。
破解的常用方法有暴力破解和字典破解,也是最笨拙的方法,就是
一个一个试。所以二者的破解方法在时间(速度)和空间(存储)上都需要
很大的资源,这样破解密码的效率极低。
此路不通就另择他法,比如,使用彩虹表进行反向推出你的密码,
彩虹表中是一些常用的固定长度的纯文本的哈希值,当这张表越大,破解密
码的机率就越大。所以对于使用哈希算法加密的方式也就不那么安全了。如
果被加密的原文不是固定的,那样彩虹表就很难进行哈希码对照了。也就更
安全了。
这种方法就是常说的“加盐”。盐(Salt)就是一个随机生成的字符
串,每次修改密码或者操作,都会生成新的随机字符串,将原始密码进行哈
希算法之后,进行加盐,就是把随机字符串混入到密码哈希值中,再将这个
值再次进行哈希算法计算,这样生成的密文就更安全了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Security 中使用密码加盐是一种常见的安全策略,可以增加密码的强度,防止彩虹表攻击。下面是一个简单的示例代码,演示了如何使用密码加盐: 首先,确保你已经添加了 Spring Security 的依赖包。 在你的用户实体类中,一般是实现了 UserDetails 接口的自定义 User 类,可以添加一个额外的字段用于保存密码值。例如: ```java @Entity @Table(name = "users") public class User implements UserDetails { // 其他属性... @Column(name = "salt") private String salt; // getter 和 setter 方法... } ``` 接下来,在用户注册或者密码更新时,需要生成一个随机的值,并将值与密码进行混合计算并保存。可以使用 Spring Security 提供的 PasswordEncoder 接口来完成。例如: ```java @Autowired private PasswordEncoder passwordEncoder; public void registerUser(User user, String rawPassword) { // 生成随机值 SecureRandom random = new SecureRandom(); byte[] saltBytes = new byte[16]; random.nextBytes(saltBytes); String salt = Base64.getEncoder().encodeToString(saltBytes); // 将值保存到用户实体类中 user.setSalt(salt); // 对密码进行加盐加密 String encodedPassword = passwordEncoder.encode(rawPassword + salt); user.setPassword(encodedPassword); // 保存用户信息 userRepository.save(user); } ``` 这样,密码就被加盐后保存在数据库中。在用户登录时,可以使用相同的密码加盐方式进行验证。例如: ```java @Autowired private PasswordEncoder passwordEncoder; public boolean authenticate(String username, String rawPassword) { User user = userRepository.findByUsername(username); if (user != null) { // 获取用户保存的值 String salt = user.getSalt(); // 对用户输入的密码进行加盐加密 String encodedPassword = passwordEncoder.encode(rawPassword + salt); // 比较加密后的密码是否与数据库中保存的密码相同 return encodedPassword.equals(user.getPassword()); } return false; } ``` 这样,就可以使用密码加盐来增加密码的安全性了。希望对你有所帮助!如果你有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值