Java中使用加密盐

0 前言

众所周知,密码肯定不能用明文存储。

之前一直使用MD5进行加密,现在才知道有彩虹表这回事。所以记录一下对应的处理方式:加密盐。

1 彩虹表

例如用MD5加密,随便没法破解,但是有些常用的字符被收集到彩虹表里那就危险了。

例如:123456使用MD5加密(32小写)后为:e10adc3949ba59abbe56e057f20f883e

一旦这个字符串被泄露,那么使用这个密码的用户就有极大的风险。

2 加密盐

加密盐(Salt)是一种在密码学中用于增加密码存储安全性的技术。盐通常是一个随机生成的字符串,它被添加到原始密码的前端、后端或嵌入到密码中间,然后再与密码一起进行哈希运算。这样做的目的是为了增加密码破解的难度,特别是针对彩虹表攻击(一种预先计算好的哈希值对照表,用于快速查找密码)和暴力破解攻击。

2.1 手搓加密盐

2.1.1 密码加盐(加密)

输入密码

产生盐值 -> 唯一字符串

盐值拼接字符串 生成加盐后的密码

加盐后的密码再次拼接输入的密码,生成最终的密文

2.1.2 密码验证

输入用户+密码

查出用户的密码

密码分割,找出密码的盐值

用户输入的密码+盐值 进行加密

拼接后 得到的加密值与查出的密码进行对比验证

后续操作

2.1.3 工具类

   /**
     * 1.加盐并生成最终的密码
     *
     * @param password 明文的密码
     * @return 最终生成的密码
     */
    public static String encrypt(String password) {
   
        //a.产生盐值
        //UUID.randomUUID()会生成32位数字+4位-,是随机的唯一的,将4位-去掉就得到32位数字的盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        //生成加盐后的密码(需要使用MD5)
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        //生成最终的密码格式
        String finalPassword = salt + "#" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值