Shiro认证-身份认证加密

目录
一、盐加密
什么是盐加密?
数据库密码的发展史
1.1pom依赖
1.2web.xml配置
1.3密码工具类
测试
盐加密新增用户的操作流程:
二、shiro认证
步骤
1.通过逆向工程将五张表生成对应的model、?编辑
2.中新增
整合
配置文件-shiro.xml
完成自定义realm

测试
一、盐加密 什么是盐加密?
在面对这个网络世界的时候,密码安全总是各个公司和用户都非常关心的一个内容,毕竟现在大家不管是休闲娱乐还是学习购物都是通过网上的帐号来进行消费的,所以我们通常会给用户的密码进行加密 。在加密的时候,经常会听到“加盐”这个词,这是什么意思呢?
加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联 。无论何时只要口令改变,随机数就改变 。随机数以未加密的方式存放在口令文件中,这样每个人都可以读 。不再只保存加密过的口令,而是先将口令和随机数连接起来然后一同加密,加密后的结果放在口令文件中 。
定义:将每一个口令同“盐”随机关联
数据库密码的发展史
第一个阶段:明文密码
第二个阶段:MD5加密 如:

Shiro认证-身份认证加密

文章插图
第三个阶段:MD5加盐加密
第四个阶段:MD5加盐加密加次数
由于明文密码泄露出去后很容易会造成不好的影响,没有保密性,所以就有了之后的各种加密方式 本篇我们将使用的是md5加盐加密加次数的加密方式
1.1pom依赖
org.apache.shiroshiro-core1.3.2org.apache.shiroshiro-web1.3.2org.apache.shiroshiro-spring1.3.2
1.2web.xml配置
shiroFilterorg.springframework.web.filter.DelegatingFilterProxytargetFilterLifecycletrueshiroFilter/*
1.3密码工具类
package com.oyang.shiro;import org.apache.shiro.crypto.RandomNumberGenerator;import org.apache.shiro.crypto.SecureRandomNumberGenerator;import org.apache.shiro.crypto.hash.SimpleHash;/*** 用于shiro权限认证的密码工具类*/public class PasswordHelper {/*** 随机数生成器*/private static RandomNumberGenerator randomNumberGenerator = new SecureRandomNumberGenerator();/*** 指定hash算法为MD5*/private static final String hashAlgorithmName = "md5";/*** 指定散列次数为1024次,即加密1024次*/private static final int hashIterations = 1024;/*** true指定Hash散列值使用Hex加密存. false表明hash散列值用用Base64-encoded存储*/private static final boolean storedCredentialsHexEncoded = true;/*** 获得加密用的盐** @return*/public static String createSalt() {return randomNumberGenerator.nextBytes().toHex();}/*** 获得加密后的凭证** @param credentials 凭证(即密码)* @param salt盐* @return*/public static String createCredentials(String credentials, String salt) {SimpleHash simpleHash = new SimpleHash(hashAlgorithmName, credentials,salt, hashIterations);return storedCredentialsHexEncoded ? simpleHash.toHex() : simpleHash.toBase64();}/*** 进行密码验证** @param credentials未加密的密码* @param salt盐* @param encryptCredentials 加密后的密码* @return*/public static boolean checkCredentials(String credentials, String salt, String encryptCredentials) {return encryptCredentials.equals(createCredentials(credentials, salt));}public static void main(String[] args) {//盐String salt = createSalt();System.out.println(salt);System.out.println(salt.length());//凭证+盐加密后得到的密码String credentials = createCredentials("123456", salt);System.out.println(credentials);System.out.println(credentials.length());boolean b = checkCredentials("123456", salt, credentials);System.out.println(b);}}