shiro最闪亮的四大特征:认证,权限,加密,会话管理

为了提高应用系统的安全性,这里主要关注shiro提供的密码服务模块;

1.加密工具类的熟悉

首先来个结构图,看看shiro提供了哪些加密工具类:

2.通过shiro进行散列算法操作,常见的有两个MD5,SHA-1

简单的散列操作:代码如下

    <span style="font-size:18px;">public static void test1() {  

            // 假设是用户输入的密码
String password = "123456";
// 加入的盐(百度百科有)
String salt = "jack"; // 这是最原始的MD5加密 (可在网上破解)
Md5Hash originalMd5 = new Md5Hash(password);
System.out.println(originalMd5.toString());// 输出加密后的密码 // 这种也是原始md5加密(可在网上破解)
SimpleHash originalMd52 = new SimpleHash("MD5", password);// 构造函数中的 "MD5"的意思是进行md5加密,大小写无关
System.out.println(originalMd52.toString()); // sha-1 原始加密方法(可在网上破解)
SimpleHash originalSha1 = new SimpleHash("SHA-1", password);//
System.out.println(originalSha1.toString()); // 要加大破解难度,这时候加个'盐'来加密是爽歪歪的 // 第1种MD5加盐加密操作
Md5Hash newPassword = new Md5Hash(password, salt, 1);// 第三个参数 "1"的意思是循环加密多少次
System.out.println(newPassword.toString()); // 第2种MD5加盐加密操作
SimpleHash sh = new SimpleHash("MD5", password, salt, 1);// 第四个参数 "1"的意思是循环加密多少次
System.out.println(sh.toString()); // 第2种SHA-1加盐加密操作
SimpleHash sh2 = new SimpleHash("SHA-1", password, salt, 1);// 第四个参数 "1"的意思是循环加密多少次
System.out.println(sh2.toString());
}</span>

不过我们平常是得把散列的加密方式配置到ini文件中,实际项目上我们不可能把用户的账号和密码写在ini配置文件中,而是通过数据库查询进行处理的,所以要用到自定义,其实就是加上数据库的操作而已。配置文件如下:shiro_hash.ini   注意:ini文件是以;开始的

    <span style="font-size:18px;">[main]
;认证适配器
hashedCredentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher
;加密的方式_MD5
hashedCredentialsMatcher.hashAlgorithmName=MD5;
;循环加密多少次
hashedCredentialsMatcher.hashIterations=1
;自定义的realm 认证
HashRealm=com.ywj.TestShiro.HashRealm
;自定义的realm的认证适配器
HashRealm.credentialsMatcher=$hashedCredentialsMatcher
;加入securityManager中
securityManager.realms=$HashRealm;
</span>

自定义的Realm:

    <span style="font-size:18px;">import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource; public class HashRealm extends AuthorizingRealm { @Override
public void setName(String name) {
super.setName("HashRealm");// 自定义一个名字
} // 认证不关这块的事,先空着先
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// TODO Auto-generated method stub
return null;
} @Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { // 获取token里的账号
String username = String.valueOf(token.getPrincipal()); // 假设这里是逻辑是从数据库获取用户信息不存在
if(StringUtils.isBlank(username) || "a".equals(username)) {
return null;// 返回一个空,就是没这个用户存在
}
// 盐
String salt = "jack";
String password = "4da71e0c7f2fa0ff8a25ecc4f5dab6d4";// 假设这个是数据库里查询出来的用户密码MD5加密后的
// 返回认证信息
return new SimpleAuthenticationInfo(username, password, ByteSource.Util.bytes(salt), this.getName());
} }<span style="color:#ff6666;">
</span></span>

http://blog.csdn.net/u013845177/article/details/77620957

shiro进行散列算法操作的更多相关文章

  1. shiro中自定义realm实现md5散列算法加密的模拟

    shiro中自定义realm实现md5散列算法加密的模拟.首先:我这里是做了一下shiro 自定义realm散列模拟,并没有真正链接数据库,因为那样东西就更多了,相信学到shiro的人对连接数据库的一 ...

  2. Shiro入门学习之散列算法与凭证配置(六)

    一.散列算法概述 散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如MD5.SHA等,一般进行散列时最好提供一个salt(“盐”),什么意思?举个栗子 ...

  3. 个人理解c#对称加密 非对称加密 散列算法的应用场景

    c#类库默认实现了一系列加密算法在System.Security.Cryptography; 命名空间下 对称加密 通过同一密匙进行加密和解密.往往应用在内部数据传输情况下.比如公司a程序 和B程序 ...

  4. [转帖]什么是安全散列算法SHA256?

    什么是安全散列算法SHA256? http://8btc.com/article-136-1.html 发布者: 无主之地 发表于: 2013-10-1 01:31 78152 2 分享   安全散列 ...

  5. 什么是安全散列算法SHA256?

    安全散列算法SHA(Secure Hash Algorithm)是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1.SHA-224.S ...

  6. PKI和加密,散列算法

    Day 11-PKI和加密,散列算法 PKI(Public Key Infrastructure公钥基础设施) 1 PKI(Public Key Infrastructure公钥基础设施)回顾学习 - ...

  7. Android数据加密之SHA安全散列算法

    前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...

  8. C# SHA1散列算法

    C# SHA1散列算法 /// <summary> /// C# SHA1散列算法 /// </summary> /// <param name="str&qu ...

  9. SHA安全散列算法简析

    1 SHA算法简介 1.1 概述 SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散 ...

随机推荐

  1. javascript属性之get/set

    var o = { get x(){ return 7; }, set x(val){ console.info("不能设置x的值"); } } o.x //7 读取x值的时候,会 ...

  2. linux_运维职责

    运维准则: 不要删文件,移动文件,可以复原,一个月后什么事没有,删除 运维人员主要关注哪些方面? CPU:对计算机工作速度和效率起决定性作用(intel amd) 内存: 临时存放数据:容量和处理速度 ...

  3. js_3_for_if_try

    在js中有哪些特殊变量? null 指向一个空地址,一个特殊的地址 var u 定义了一个特殊变量u,类型未定义,boolean(u)=false js中的for循环是什么样子? 对列表: for(v ...

  4. python_如何为元组中每个元素命名

    学生信息系统: (名字,年龄,性别,邮箱地址) 为了减少存储开支,每个学生的信息都以一个元组形式存放 如: ('tom', 18,'male','tom@qq.com' ) ('jom', 18,'m ...

  5. Junit4X系列--hamcrest的使用

    OK,在前面的一系列博客里面,我整理过了Assert类下面常用的断言方法,比如assertEquals等等,但是org.junit.Assert类下还有一个方法也用来断言,而且更加强大.这就是我们这里 ...

  6. C# TCP 了解

    参考:http://www.jb51.net/article/118682.htm 一: TCP 粘包原理:发送方发送若干数据给接收方时粘成一包.从接收缓冲区看,后一包的头紧接前一包的数据的尾. 发送 ...

  7. 【转】nagios使用带url的check_http检测主机

    前一段时间在Cu论坛发现一个提问,问题是nagios关于检测主机http服务的.原帖地址http://bbs.chinaunix.net /forum.php?mod=viewthread&t ...

  8. 【转】国际GNSS服务组织IGS

    国际GNSS服务组织The International GNSS Service,简称IGS,前身为国际GPS服务组织.IGS提供的高质量数据和产品被用于地球科学研究等多个领域. IGS组织由卫星跟踪 ...

  9. html的标签

    <a>:anchor 定义锚 <abbr>:abbreviation 定义缩写 <acronym>: 定义只取消首字母的缩写 <address>:定义地 ...

  10. Python学习笔记(一):列表和元组

    1.列表和元组的主要区别在于:列表可以修改,元组则不能.即如果要根据要求添加元素,列表更适合,    如果出于某种原因,序列不能修改的时候,使用元组更为合适. 2.通用序列操作1)索引:正数索引时,p ...