Shiro加密
在开发的时候,很多数据我们都希望是以加密过后的形式存储起来,而不是最原始的数据。
在shiro中也提供了编码,解码,加密,加密算法实现等等一系列的内容。
编码/解码
在org.apache.shiro.codec包中,提供了Base64,16进制等的编码解码工具类的实现。
package com.fuwh.demo; import org.apache.shiro.codec.Base64;
import org.apache.shiro.codec.Hex; public class CodecDemo { public static void main(String[] args) {
String password="pass1234"; /*
* Base64类提供了一些base64方式的编码和解码操作
*/
System.out.println("Base64加密后:"+Base64.encodeToString(password.getBytes()));
System.out.println("Base64解密后:"+Base64.decodeToString(Base64.encodeToString(password.getBytes()))); /*
* Hex类提供了一些十六进制的编码和解码操作
*/
System.out.println("Hex编码后:"+Hex.encodeToString(password.getBytes()));
System.out.println("Hex解码后:"+new String(Hex.decode(Hex.encode(password.getBytes()))));
}
}
在这个包中,还有一个CodeSupport的类,提供了丰富的对象编码,字符串编码等等操作。
散列算法
在org.apache.shiro.crypto.hash包中,提供了一些列的Md2,Md5,Sha256等等的散列算法相关的操作。
package com.fuwh.demo; import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.crypto.hash.Sha256Hash; public class HashDemo { public static void main(String[] args) {
String password="pass1234"; /*
* Md5散列解密,通常用来加密密码
* 在散列解密的时候,可以指定盐(salt)和加密的次数
* 盐用来提高加密的复杂度,因为弹出的Md5加密还是可能被破解
* 但是,加上一个只有系统知道的盐就基本上不会被破解了
* 加密次数,用来提高加密的复杂度
*/
Md5Hash md5Hash1=new Md5Hash(password);
Md5Hash md5Hash2=new Md5Hash(password, "123");
Md5Hash md5Hash3=new Md5Hash(password, "123",2);
System.out.println("Md5加密--不加盐:"+md5Hash1);
System.out.println("Md5加密--加盐:"+md5Hash2);
System.out.println("Md5加密--加盐--二次加密:"+md5Hash3); /*
* Sha256Hash
*/
Sha256Hash sha256Hash1=new Sha256Hash(password);
Sha256Hash sha256Hash2=new Sha256Hash(password, "123");
Sha256Hash sha256Hash3=new Sha256Hash(password, "123",2);
System.out.println("Sha256Hash加密--不加盐:"+sha256Hash1);
System.out.println("Sha256Hash加密--加盐:"+sha256Hash2);
System.out.println("Sha256Hash加密--加盐--二次加密:"+sha256Hash3);
}
}
当前,还有一些其他的实现。
在这个包中,还提供了一个可以个性化定制可重用的加密类,可以定制加密策略,随机盐,多次加密等等。
package com.fuwh.demo; import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.DefaultHashService;
import org.apache.shiro.crypto.hash.HashRequest;
import org.apache.shiro.util.SimpleByteSource; public class HashServiceDemo { public static void main(String[] args) {
/*
* 构建一个HashService
* 默认情况下:
* 散列算法:SHA-512
* 循环次数:1
* 不生成公盐
*/
DefaultHashService service=new DefaultHashService();
service.setHashAlgorithmName("SHA-512");//设置加密算法,默认就是这个
service.setPrivateSalt(new SimpleByteSource("123"));//设置私盐
service.setGeneratePublicSalt(true);//设置生成公研
service.setRandomNumberGenerator(new SecureRandomNumberGenerator());//设置公盐的生成方式
service.setHashIterations(1);//设置加密次数 /*
* 构建一个HashRequest里面包含了HashService加密需要的一些信息。
*/
HashRequest request=new HashRequest.Builder()
.setAlgorithmName("MD5")
.setSalt("12345")
.setSource("pass1234")
.setIterations(2)
.build(); System.out.println(service.computeHash(request).toString());
}
}
加密/解密
package com.fuwh.demo; import java.security.Key; import org.apache.shiro.crypto.AesCipherService; public class AesCipherServiceDemo { public static void main(String[] args) { AesCipherService acs=new AesCipherService();
String pass="pass1234";
Key key=acs.generateNewKey();
System.out.println(acs.encrypt(pass.getBytes(), key.getEncoded()));
System.out.println(acs.encrypt(pass.getBytes(), key.getEncoded()).toString());
System.out.println(acs.encrypt(pass.getBytes(), key.getEncoded()).toHex());
System.out.println(acs.encrypt(pass.getBytes(), key.getEncoded()).toBase64());
}
}
查看源码:https://github.com/oukafu/shiro
Shiro加密的更多相关文章
- shiro学习(三,shiro加密)
shiro加密 使用MD5加密 认证 //自定义的Realm 域 public class CustomRealmSecret extends AuthorizingRealm { @Overrid ...
- Shiro 加密helloWorld
承接第一章 初解加密 只贴更改的源码,其他看上一篇. ShiroRealm.java package com.lkk.shiro.realms; import org.apache.shiro.aut ...
- shiro加密简单实现
1.添加shiro依赖 定义shiro的版本号 <shiro.ver>1.2.3</shiro.ver> 加入shiro的依赖 <dependency> <g ...
- 7、Shiro加密和加盐
这里我们以md5加密方法举例,首先我们写一个main方法测试我们的密码经过md5加密之后的得到什么样的字符串: /** * 书写方法测试Md5Hash将密码“houru”加密之后的密文 * 但是仅仅加 ...
- 【Shiro】五、Apache Shiro加密
Shiro提供了更好封装,更好使用的加密算法API,可以作为平时使用的一个工具类的预选方案. Shiro的密码学 基本特性 接口驱动,基于POJO 对JCE(Java Cryptography Ext ...
- shiro加密流程
- shiro 框架之 加密处理。
一.shiro 加密? /* Shiro? 一.为什么要加密? 为调高数据库的安全性,需要给密码加密. 二.常见的加密算法? 1.1哈希算法 md5:加密算法 哈希函数 1.2.对称算法 1.3.非对 ...
- shiro权限控制(一):shiro介绍以及整合SSM框架
shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...
- Shiro报错-[org.apache.shiro.mgt.AbstractRememberMeManager] - There was a failure while trying to retrieve remembered principals.
2017-04-08 11:55:33,010 WARN [org.apache.shiro.mgt.AbstractRememberMeManager] - There was a failure ...
随机推荐
- C语言第三次作业总结
本次作业的亮点 总体情况 大部分同学基本掌握了单层循环结构的写法,懂得了代码调试的过程 PTA通过率及作业质量都不错,希望再接再厉 推荐博客 黄毓颖 推荐理由:代码思路清晰,格式良好:调试过程相当形象 ...
- C语言第二次作业
一.PTA实验作业 题目1:7-1 计算分段函数[2] 1.实验代码 double x,y; scanf("%lf",&x); if (x>=0) { y=sqrt( ...
- 【iOS】Swift LAZY 修饰符和 LAZY 方法
延时加载或者说延时初始化是很常用的优化方法,在构建和生成新的对象的时候,内存分配会在运行时耗费不少时间,如果有一些对象的属性和内容非常复杂的话,这个时间更是不可忽略.另外,有些情况下我们并不会立即用到 ...
- JAVA_SE基础——27.匿名对象
黑马程序员入学blog... 匿名对象:没有引用类型变量指向的对象称作为匿名对象. 匿名对象要注意的事项:1. 我们一般不会给匿名对象赋予属性值,因为永远无法获取到.2. 两个匿名对象永远都不可能是同 ...
- Aache的虚拟主机配置虚拟目录
3. 打开 httpd.conf 文件, 添加如下代码: # Virtual hosts Include conf/extra/httpd-vhosts.conf 如果已存在,将Include前面的# ...
- Andrew Ng机器学习第一章——单变量线性回归
监督学习算法工作流程 h代表假设函数,h是一个引导x得到y的函数 如何表示h函数是监督学习的关键问题 线性回归:h函数是一个线性函数 代价函数 在线性回归问题中,常常需要解决最小化问题.代价函数常用平 ...
- print 函数设置字体颜色
格式:\033[显示方式;前景色;背景色m数值表示的参数含义:显示方式: 0(默认值).1(高亮).22(非粗体).4(下划线).24(非下划线). 5(闪烁).25(非闪烁).7(反显).27(非反 ...
- [扩展推荐] —— Laravel Log 增强
Laravel Log Enhancer 是 Laravel 5.6 的一个扩展包,可以在 Laravel 日志中添加额外的数据. 得益于 Laravel 5.6 中日志的更新,这个包利用这些特性扩 ...
- Spring AOP AspectJ
本文讲述使用AspectJ框架实现Spring AOP. 再重复一下Spring AOP中的三个概念, Advice:向程序内部注入的代码. Pointcut:注入Advice的位置,切入点,一般为某 ...
- python实现 双向循环链表
最近身边的朋友在研究用python来实现数据结构.遇到一个问题就是双向循环链表的实现,改指向的时候总是发蒙. 我自己尝实现了一个python的双向循环链表.附上代码,希望对大家有帮助. 如果不懂什么是 ...