shiro salt

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 1.1 散列算法 散列算法一般用于生成一段文本的摘要信息,散列算法不可逆,将内容可以生成摘要,无法将摘要转成原始内容。散列算法常用于对密码进行散列,常用的散列算法有MD5、SHA。

1.1 散列算法

散列算法一般用于生成一段文本的摘要信息,散列算法不可逆,将内容可以生成摘要,无法将摘要转成原始内容。散列算法常用于对密码进行散列,常用的散列算法有MD5SHA分享牛系列,分享牛专栏,分享牛

一般散列算法需要提供一个salt(盐)与原始内容生成摘要信息,这样做的目的是为了安全性,比如:111111md5值是:96e79218965eb72c92a549dd5a330112,拿着“96e79218965eb72c92a549dd5a330112”去md5破解网站很容易进行破解,如果要是对111111salt(盐,一个随机数)进行散列,这样虽然密码都是111111加不同的盐会生成不同的散列值。分享牛系列,分享牛专栏,分享牛

1.1.1 例子

//md5加密,不加盐
		String password_md5 = new Md5Hash("111111").toString();
		System.out.println("md5加密,不加盐="+password_md5);
		
		//md5加密,加盐,一次散列
		String password_md5_sale_1 = new Md5Hash("111111", "eteokues", 1).toString();
		System.out.println("password_md5_sale_1="+password_md5_sale_1);
		String password_md5_sale_2 = new Md5Hash("111111", "uiwueylm", 1).toString();
		System.out.println("password_md5_sale_2="+password_md5_sale_2);
		//两次散列相当于md5(md5())

		//使用SimpleHash
		String simpleHash = new SimpleHash("MD5", "111111", "eteokues",1).toString();
		System.out.println(simpleHash);

1.1.2 realm中使用

 

实际应用是将盐和散列后的值存在数据库中,自动realm从数据库取出盐和加密后的值由shiro完成密码校验。

1.1.2.1 自定义realm

@Override
	protected AuthenticationInfo doGetAuthenticationInfo(
			AuthenticationToken token) throws AuthenticationException {
		
		//用户账号
		String username = (String) token.getPrincipal();
		//根据用户账号从数据库取出盐和加密后的值
		//..这里使用静态数据
		//如果根据账号没有找到用户信息则返回null,shiro抛出异常“账号不存在”
		
		//按照固定规则加密码结果 ,此密码 要在数据库存储,原始密码 是111111,盐是eteokues
		String password = "cb571f7bd7a6f73ab004a70322b963d5";
		//盐,随机数,此随机数也在数据库存储
		String salt = "eteokues";
		
		//返回认证信息
		SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(
				username, password, ByteSource.Util.bytes(salt),getName());
		

		return simpleAuthenticationInfo;
	}

1.1.2.2 realm配置

配置shiro-cryptography.ini

[main]

#定义凭证匹配器

credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher

#散列算法

credentialsMatcher.hashAlgorithmName=md5

#散列次数

credentialsMatcher.hashIterations=1

 

#将凭证匹配器设置到realm

customRealm=cn.shareniu.shiro.authentication.realm.CustomRealm2

customRealm.credentialsMatcher=$credentialsMatcher

securityManager.realms=$customRealm

 

1.1.2.3 测试代码

测试代码同上个章节,注意修改ini路径。

分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) Java架构师交流群 523988350

相关文章
|
2月前
|
存储 安全 Java
shiro学习二:shiro的加密认证详解,加盐与不加盐两个版本。
这篇文章详细介绍了Apache Shiro安全框架中密码的加密认证机制,包括不加盐和加盐两种加密方式的实现和测试。
142 0
|
4月前
|
安全 Java Spring
Spring Security 报:Encoded password does not look like BCrypt
Spring Security 报:Encoded password does not look like BCrypt
123 1
|
7月前
|
安全 Java 数据安全/隐私保护
BCryptPasswordEncoder的使用及原理
BCryptPasswordEncoder的使用及原理
368 0
BCryptPasswordEncoder的使用及原理
|
安全 Java 数据库
|
安全 Java API
Java中使用Shiro实现对密码加盐并使用MD5加密处理
我们在保存用户密码等敏感信息的时候,需要进行加密处理保存,才能更安全地保护用户个人信息安全
328 0
|
安全 Java 数据安全/隐私保护
浅谈Spring Security的BCryptPasswordEncoder
浅谈Spring Security的BCryptPasswordEncoder
257 0
浅谈Spring Security的BCryptPasswordEncoder
|
前端开发 Java 数据安全/隐私保护
|
前端开发 安全 Java
spring整合shiro(含MD5加密)(上)
shiro是apache提供的一个强大易用的Java安全框架,用于身份验证、授权、密码学和会话管理。
spring整合shiro(含MD5加密)(上)
|
Java 数据库连接 数据库
springboot整合shiro(含MD5加密)(上)
关于shiro介绍以及shiro整合spring,我在另一篇文章中已详细介绍,此处不作说明,请参考spring整合shiro。
springboot整合shiro(含MD5加密)(上)
|
存储 Java 数据库
springboot整合shiro(含MD5加密)(下)
springboot整合shiro(含MD5加密)
springboot整合shiro(含MD5加密)(下)