把若依前后端分离项目的BCrypt加密登录加密方式改成MD5方式

BCrypt是一个被认为适合密码存储的安全的密码哈希方法。它是一个使用Blowfish加密算法的变体的密码学算法。BCryptPasswordEncoder是Spring Security提供的一个类,Spring Security是一个强大且高度可定制的Java应用程序的认证和访问控制框架。这个类使用BCrypt算法实现密码编码。但是有些业务需求不适合该加密方式,要改成MD5方式。

需要修改项目中以下几个地方:

1.增加一个Md5PasswordEncoder 来继承PasswordEncoder,实现encode和matches两个方法,实现自定义加密逻辑

项目中增加一个Md5PasswordEncoder类(加哪里都可以)

里面的getMd5是自定义的加密逻辑,这里我是在网上找的,如果要用其他的加密算法,比如md5加盐也可以去网上找找。

import org.springframework.security.crypto.password.PasswordEncoder;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Md5PasswordEncoder implements PasswordEncoder {
    @Override
    public String encode(CharSequence rawPassword) {
        return getMd5(rawPassword.toString());
    }

    @Override
    public boolean matches(CharSequence rawPassword, String encodedPassword) {
        // Compare the raw password (provided by the user) with the encoded password (from the database)
        return getMd5(rawPassword.toString()).equals(encodedPassword);
    }

    public static String getMd5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] messageDigest = md.digest(input.getBytes());
            BigInteger no = new BigInteger(1, messageDigest);
            String hashtext = no.toString(16);
            while (hashtext.length() < 32) {
                hashtext = "0" + hashtext;
            }
            return hashtext;
        } catch (NoSuchAlgorithmException e) {
            System.out.println("Exception thrown"
                    + " for incorrect algorithm: " + e);
            return null;
        }
    }
}

2.第二步找到securityConfig的配置文件,在项目中的framework 中的config,可以找到两个方法,

在配置文件中新增一个Md5PasswordEncoder方法,注入bean,

把configure方法中的bCryptPasswordEncoder()修改为新增的passwordEncoder().

如下:

configure是注入security加密算法,所以注入上一步咱们构建的Md5PasswordEncoder

    /**
     * 强散列哈希加密实现
     */
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder()
    {
        return new BCryptPasswordEncoder();
    }

    /**
     * 身份认证接口
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception
    {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }

    @Bean
    public Md5PasswordEncoder passwordEncoder(){
        return new Md5PasswordEncoder();
    }

3.修改common中的utils的securityUtils,其中要修改两个方法encryptPassword和matchesPassword(登录的流程会调用这两个方法)

把原先的代码注释掉:

    /**
     * 生成BCryptPasswordEncoder密码
     *
     * @param password 密码
     * @return 加密字符串
     */
    public static String encryptPassword(String password)
    {
//        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
//        return passwordEncoder.encode(password);
        Md5PasswordEncoder md5PasswordEncoder = new Md5PasswordEncoder();
        return md5PasswordEncoder.encode(password);
    }

    /**
     * 判断密码是否相同
     *
     * @param rawPassword 真实密码
     * @param encodedPassword 加密后字符
     * @return 结果
     */
    public static boolean matchesPassword(String rawPassword, String encodedPassword)
    {
//        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
//        return passwordEncoder.matches(rawPassword, encodedPassword);
        Md5PasswordEncoder md5PasswordEncoder = new Md5PasswordEncoder();
        return  md5PasswordEncoder.matches(rawPassword,encodedPassword);
    }

大功告成!由此登录的加密方式就变成了自定义的加密逻辑(MD5)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值