spring对前端传输过来的密码进行加密处理

前言

这里使用的是spring框架中的DigestUtils工具对密码进行加密,基于sprinboot技术。

注意:在实际开发中,前端在网络传输密码时,肯定是对密码进行加密处理的,比如使用RSA技术。本次我没有考虑前端密码加密的情况,如果有需要,可以自行在方法中添加对前端密码解密的逻辑;

代码

import org.springframework.util.DigestUtils;
import java.util.UUID;

public class PasswordEncode {

    /**
     * 1.随机生成字符串,作为盐,意味改变原来密码的味道
     * 2.加密格式为 盐 + 密码 + 盐 + 密码 + 盐 (为了使其更难破解这里循环了五次进行,增加了复杂度)
     * 3.因为盐是随机生成的,在验证密码时需要使用,所以最后在生成的密文前加上盐 slat + encode
     * @param rawPassword
     * @return
     */
    public static String encode(String rawPassword) {
        //如果前端对密码进行了加密处理,这里可以添加解密的逻辑,然后再通过DigestUtils加密
        //todo 解密逻辑
        
        String slat = UUID.randomUUID().toString().replace("-", "");
        String encode = "";
        for (int i = 0; i < 5; i++) {
            encode = DigestUtils.md5DigestAsHex((slat + rawPassword + slat + rawPassword + slat).getBytes());
        }
        return slat + encode;
    }

    /**
     * 1.取出盐:在加密的时候,我们在密文前面加上了盐,盐的长度为32
     * 2.获取密文:对密码进行同样的加密方式
     * 3.比较返回,如果密码是正确的,会获得一样的密文
     * @param rawPassword
     * @param encode
     * @return
     */
    public static boolean matches(String rawPassword, String encode) {
        //如果前端对密码进行了加密处理,这里可以添加解密的逻辑,然后再通过DigestUtils加密
        //todo 解密逻辑
        
        String slat = encode.substring(0, 32);
        String newPassword = "";
        for (int i = 0; i < 5; i++) {
            newPassword = DigestUtils.md5DigestAsHex((slat + rawPassword + slat + rawPassword + slat).getBytes());
        }
        return encode.equals(slat + newPassword);
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值