Spring Boot2整合Shiro:BCrypt加密密码,springsecurity+BCryptPasswordEncoder实现加密注册登录 加密问题

本文介绍了在Spring Boot2项目中使用Shiro和SpringSecurity结合BCrypt进行密码加密注册与登录验证的方法。讨论了MD5加密的局限性和盐(salt)的作用,并详细阐述了Shiro配置BCrypt的步骤,以及SpringSecurity整合BCryptPasswordEncoder的过程。通过这些方法,可以提高用户数据的安全性。
摘要由CSDN通过智能技术生成

1.Spring Boot2+Shiro:加密密码注册, 登陆验证实现2.springsecurity+BCryptPasswordEncoder实现加密注册登录

一.前言

我在这与大家分享一下登陆验证时的一些问题和实现。应用考虑到安全,绝不能明文的方式保存密码(数据库不能存看得懂的秘密,一定程度也保证了用户的安全,同时也让很多攻破数据库的程序员没法瞎搞,比如 玩游戏出现用户的账号异地登陆之类的。。。)

有很多标准的算法比如SHA或者MD5(MD5可以用彩虹表暴力破解 后面会讲解如何破解),MD5结合salt(盐)是一个不错的选择毕竟加了盐的食物才会让黑客喝一壶嘛~
咱们的主题分别是:

1.springboot2+Shiro:BCrypt加密注册登录验证。

2.springboot2+springsecurity+BCryptPasswordEncoder加密注册登录验证

学习内容:

大纲一:springboot2+Shiro:BCrypt
1、 MD5与彩虹表介绍
2、 MD5结合salt(盐)实现项目注册与登陆功能
3、 Shiro整合BCrypt加密注册与登录
大纲二:springboot2+springsecurity+BCrypt
1、 环境搭建
2、 springsecurity整合BCrypt加密注册与登录


一:springboot2+Shiro

咱们先讲讲数据库错误做法
在这里插入图片描述
这种做法是不可取的~

MD5与彩虹表的爱恨交织

import org.apache.commons.codec.digest.DigestUtils;
//没用过md5的小伙伴别导错包了 是apache底下的包
 @Test
    void contextLoads() {
   
    	//使用md5生成一个密码为123456的密文
        String md5Hex = DigestUtils.md5Hex("123456");
        System.out.println(md5Hex);
    }
 		<dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>

在这里插入图片描述
接下来咱们就可以百度一波MD5破解
在这里插入图片描述
如果是使用MD5做的加密 有很多这种解密库 一套就有密码了,因为MD5算法加密出来的结果集是不变的 就好比123456加密后的密文就是:e10adc3949ba59abbe56e057f20f883e
感兴趣的小伙伴可以直接测试一下,看看结果是不是一样的~


为Shiro配置加MD5结合salt(盐)实现项目注册与登陆功能

先说说加盐,加盐 顾名思义就是加料,嗯 就是给盗数据的家伙加佐料,比如:在密码中加东西(密码123456+_qwe)然后再用MD5(123456_qwe)加密
登陆的同时用相同的方式一层层解密。

很多复杂的加密算法就是这样来的 比如:在密码的中加字符,头部加字符,尾部。。。制定好加密的规则,然后自己再根据规则进行解密。虽然会有一定的弊端,但别着急后续有更好的方法。

注册时加盐

  1. 注册用户的加密算法

注册的server方法中 以MD5加盐的方式保存信息

package com.sj.springshiro.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sj.springshiro.mapper.UserMapper;
import com.sj.springshiro.pojo.User;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
/**
 * @author sj
 * @date 2020/11/24 - 15:53
 */
@Service
public class UserServiceImpl implements UserService
{
   
    @Autowired
    private UserMapper userMapper;
 

    /**
   String password=new SimpleHash(algorithmName,source,salt,hashIterations).toHex();
     * 1.algorithmName:加密方式(很多种,目前咱们使用MD5)
     *
     * 2.source:简单理解就是传入的原始明文密码值
     *
     * 3.salt:盐值
     *
     * 4.hashIterations:加密散列次数 
     *
     * 最终得到加密的密码 = MD5(明文密码 + 盐值)* 加密次数
     *
     * @param user
     */
    public void login(User user){
   
        String newpwd = new SimpleHash("MD5", user.getPassword(), ByteSource.Util.bytes(user.getUsername()),1).toHex();
        user.setPassword(newpwd);
        userMapper.insert(user);
    }
}

这里的加密次数是否影响项目性能我没做具体的测试,有感兴趣的小伙伴可以测试一下然后在评论中给出结论~

Shiro配置

配置算法加密三步走:

  1. ShiroConfig中创建凭证匹配器 HashedCredentialsMatcher
  2. 为我们自定义的 Realm Bean 添加凭证匹配器 HashedCredentialsMatcher
  3. 修改Realm 类中 doGetAuthenticationInfo 方法的返回值 SimpleAuthenticationInfo 的构造方法

ShiroConfig
在这里插入图片描述

package com.sj.springshiro
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值