密码加盐

12 篇文章 0 订阅
1 篇文章 0 订阅

       今天看到一个新鲜词:Salting password,加盐的密码。感觉很是纳闷,这是什么意思呢?上网查了下原来是对密码进行一些混淆增加破解的难度。

        一般对密码都不会是明文存储,而是对密码进行MD5处理,增强反向解密难度。但这样还是能可以找出破绽。

如果用户可以查看数据库,那么他可以观察到自己的密码和别人的密码加密后的结果都是一样,那么,就会知道别人用的和自己就是同一个密码。

对于这个问题其实只要稍微混淆一下就能防范住了,这在加密术语中称为“加盐”。具体来说就是在原有材料(用户自定义密码)中加入其它成分一般是用户自有且不变的因素),以此来增加系统复杂度。当这种盐和用户密码相结合后,再通过摘要处理,就能得到隐蔽性更强的摘要值

        // 对密码进行加盐后加密,加密后再通过Hibernate往数据库里存
        String changedPswd=DigestUtils.md5Hex(name+pswd);

  • 1
    点赞
  • 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、付费专栏及课程。

余额充值