为什么要进行密码加密?

在我们的日常生活中,许多人有着在不同网站上使用相同密码的坏习惯(包括我也是qaq),假如应用程序或服务器出现漏洞,数据被窃取,用户的明文密码直接被暴露给黑客。显然后果将不堪设想。使用密码加密可以有效地增加黑客破解密码的难度,提高安全性。

什么是md5加密和md5盐值加密?

  • md5加密:

    明文密码 + md5算法 = 密文密码
  • md5盐值加密

    盐值处理后的明文密码 + md5算法 = 密文密码

盐值可以由开发者进行自定义,这样密码被破解的可能性就有了显著的降低。

下面演示基于SpringBoot框架的shiro实现MD5盐值加密

SpringBoot整合shiro-实现MD5盐值加密

一、数据库中应有一个字段用于储存盐值

二、数据表映射的实体类中应有盐值属性
package com.pedro.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; import java.io.Serializable; @Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private int id;
private String username;
private String password;
private String perms;
private String salt;
}

User.java

三、ShiroConfig中设置加密方式

1、设置加密算法并用@Bean标签注入Spring容器

    //密码加密算法设置
@Bean
public HashedCredentialsMatcher hashedCredentialsMatcher(){
HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
//设置加密方式
hashedCredentialsMatcher.setHashAlgorithmName("md5");
//设置散列的次数
hashedCredentialsMatcher.setHashIterations(2);
return hashedCredentialsMatcher;
}

2、realm中设置开启加密

    @Bean
public UserRealm userRealm(){
//注入realm
UserRealm userRealm = new UserRealm();
//注入密码加密
userRealm.setCredentialsMatcher(hashedCredentialsMatcher()); return userRealm;
}
四、修改realm类中的认证方法

那么注册用户时如何对用户设置的密码进行加密呢?

一、可以准备一个用于加密的工具方法
public class PasswordGenerateUtil {

    public static String getPassword(String username, String password, String salt, int hashTimes) {
//利用传入的信息进行加密,得到密文
Md5Hash md5Hash = new Md5Hash(password, username + salt, hashTimes);
//返回密文
return md5Hash.toString();
} }
二、注册用户时注意
  • 向数据库中存入用户信息时调用工具方法,加密密码再存入
  • 存入用户信息时候记得把盐值也存进去
String salt1 = Long.toString(System.currentTimeMillis());

注意事项:

  • 加密密码时设置的盐值处理方式必须和realm中存入info时的盐值处理方式设置得一样
  • 加密时的散列次数必须和ShiroConfig中加密算法的bean中设置的一样

2020-5-24

SpringBoot整合shiro-MD5盐值加密的更多相关文章

  1. shiro密码的比对,密码的MD5加密,MD5盐值加密,多个Relme

    有具体问题的可以参考之前的关于shiro的博文,关于shiro的博文均是一次工程的内容 密码的比对   通过AuthenticatingRealm的CredentialsMatcher方法 密码的加密 ...

  2. SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理|前后端分离(下)----筑基后期

    写在前面 在上一篇文章<SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期>当中,我们初步实现了SpringBoot整合Shiro ...

  3. c# MD5盐值加密

    using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptograph ...

  4. SpringBoot整合Shiro+MD5+Salt+Redis实现认证和动态权限管理(上)----筑基中期

    写在前面 通过前几篇文章的学习,我们从大体上了解了shiro关于认证和授权方面的应用.在接下来的文章当中,我将通过一个demo,带领大家搭建一个SpringBoot整合Shiro的一个项目开发脚手架, ...

  5. Spring Security中的MD5盐值加密

    在 spring Security 文档中有这么一句话: "盐值的原理非常简单,就是先把密码和盐值指定的内容合并在一起,再使用md5对合并后的内容进行演算,这样一来,就算密码是一个很常见的字 ...

  6. MD5盐值加密

    加密思路 思路解析:(数据解析过程基于16进制来处理的,加密后为16进制字符串) 加密阶段: 对一个字符串进行MD5加密,我们需要使用到MessageDigest(消息摘要对象),需要一个盐值(sal ...

  7. shiro 密码的MD5盐值加密

  8. c# MD5及盐值加密

    using System;using System.Collections.Generic;using System.Linq;using System.Security.Cryptography;u ...

  9. springboot系列(十)springboot整合shiro实现登录认证

    关于shiro的概念和知识本篇不做详细介绍,但是shiro的概念还是需要做做功课的要不无法理解它的运作原理就无法理解使用shiro: 本篇主要讲解如何使用shiro实现登录认证,下篇讲解使用shiro ...

随机推荐

  1. 分布式系统:xxl-job改造spring-cloud

    目录 改造原因 主要改造思路 调度中心 调度中心 执行器侧 总结 修改后的源码仓库地址:GitHub. : 改造原因 原有的xxl-job使用自己实现的http协议进行注册以及调度等,与目前框架中本身 ...

  2. JAVA编程中button按钮,actionlistener和mouseClicked区别

    在java的编程中,对于按钮button 有两个事件: 1.actionPerformed 2.mouseClicked 区别: actionPerformed:一般事件,仅侦听鼠标左键的单击事件,右 ...

  3. Kafka分区分配策略(Partition Assignment Strategy)

    众所周知,Apache Kafka是基于生产者和消费者模型作为开源的分布式发布订阅消息系统(当然,目前Kafka定位于an open-source distributed event streamin ...

  4. Promise用法

    1.概述 Promise是一步编程的一种解决方案,从语法上讲,promise是一个对象,从它可以获取异步的问题 Promise的优点: 可以避免多次异步调用嵌套导致的回调地域 提供了简洁的api,使得 ...

  5. On-the-fly Garbage Collection: an Exercise in Cooperation

    On-the-fly Garbage Collection: an Exercise in Cooperation - Microsoft Research https://www.microsoft ...

  6. OPTIONS的预请求(Preflighted Request)

    OPTIONS的预请求(Preflighted Request) Ajax 请求中出现OPTIONS(Request Method: OPTIONS)_qiao-CSDN博客 https://blog ...

  7. mysql8.0.19忘记密码

    1.管理员打开cmd窗口 2.输入net stop mysql,停止mysql服务 3.开启跳过验证密码的mysql服务 用记事本打开 输入skip-grant-tables ,保存 4.管理员打开新 ...

  8. POJ1195 二维线段树

    Mobile phones POJ - 1195 Suppose that the fourth generation mobile phone base stations in the Tamper ...

  9. Mysql数据库用户及用户权限管理,Navicat设置用户权限

    Mysql数据库用户及用户权限管理,Navicat设置用户权限 一.Mysql数据库的权限 1.1 mysql数据库用户权限级别 1.2 mysql数据库用户权限 1.3 存放用户权限表的说明 二.用 ...

  10. K8s 一、(1、容器基本概念 2、k8s基本概念 )

    1.容器基本概念 容器其实就是一种特殊的进程,容器是一个 '单进程'模型. Namespace :隔离 Namespace 技术实际上修改了应用进程看待整个计算机"视图",即它的& ...