在开发的时候,很多数据我们都希望是以加密过后的形式存储起来,而不是最原始的数据。

在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加密的更多相关文章

  1. shiro学习(三,shiro加密)

    shiro加密 使用MD5加密  认证 //自定义的Realm 域 public class CustomRealmSecret extends AuthorizingRealm { @Overrid ...

  2. Shiro 加密helloWorld

    承接第一章 初解加密 只贴更改的源码,其他看上一篇. ShiroRealm.java package com.lkk.shiro.realms; import org.apache.shiro.aut ...

  3. shiro加密简单实现

    1.添加shiro依赖 定义shiro的版本号 <shiro.ver>1.2.3</shiro.ver> 加入shiro的依赖 <dependency> <g ...

  4. 7、Shiro加密和加盐

    这里我们以md5加密方法举例,首先我们写一个main方法测试我们的密码经过md5加密之后的得到什么样的字符串: /** * 书写方法测试Md5Hash将密码“houru”加密之后的密文 * 但是仅仅加 ...

  5. 【Shiro】五、Apache Shiro加密

    Shiro提供了更好封装,更好使用的加密算法API,可以作为平时使用的一个工具类的预选方案. Shiro的密码学 基本特性 接口驱动,基于POJO 对JCE(Java Cryptography Ext ...

  6. shiro加密流程

  7. shiro 框架之 加密处理。

    一.shiro 加密? /* Shiro? 一.为什么要加密? 为调高数据库的安全性,需要给密码加密. 二.常见的加密算法? 1.1哈希算法 md5:加密算法 哈希函数 1.2.对称算法 1.3.非对 ...

  8. shiro权限控制(一):shiro介绍以及整合SSM框架

    shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...

  9. 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 ...

随机推荐

  1. 仿京东树形菜单插件hovertree

    hovertree是一个仿京东的树形菜单jquery插件,暂时有银色和绿色两种. 官方网址:http://keleyi.com/jq/hovertree/欢迎下载使用 查看绿色效果:http://ke ...

  2. hibernate框架学习笔记11:Criteria查询详解

    创建实体类对象: package domain; import java.util.HashSet; import java.util.Set; //客户实体 public class Custome ...

  3. 编写简单的辅助脚本来在 Google 表格上记账

    我的第二份工作入职在即,而这一次则真的是完全跑到了一个陌生的城市了.租房,购置相关用品,还尚未工作钱就花掉一堆.尽管我个人之前一直都没有过记账的习惯,但为了让自己能够搞清楚自己的钱都花在哪里了,于是还 ...

  4. 使用Dockerfile创建一个tomcat镜像,并运行一个简单war包

    docker已经看了有一段时间了,对镜像和容器也有了一个大致了解,参考书上的例子制作一个tomcat镜像,并简单运行一个HelloWorld.war 1.首先下载linux环境的tomcat和jdk, ...

  5. alpha冲刺第三天

    一.合照 二.项目燃尽图 三.项目进展 今天是一个瓶颈期,在昨天被困住的地方今天还是没能解决,所以今天的项目进展并没有发生什么变化. 今天晚上xl和lj去实验室找学姐了,在学姐的帮助下大概有了一点思路 ...

  6. 总结随笔(Beta)

    听说 -- beta冲刺总结 beta冲刺成员名单 姓名 学号 负责方向 个人主页 周龙荣 031402543 前端页面.跳转 http://www.cnblogs.com/ZHOULR/ 李家鹏 0 ...

  7. C++数据结构中的基本算法排序

    冒泡排序 基本思想:两两比较待排序的数,发现反序时交换,直到没有反序为止. public static void BubbleSort(int[] R) { for (int i = 0; i < ...

  8. Django 博客

    blogproject/blogproject/settings.py ## 其它配置代码... # 把英文改为中文 LANGUAGE_CODE = 'zh-hans' # 把国际时区改为中国时区 T ...

  9. 【iOS】Swift if let 和 if var

    if let unwrappedOptional = postDict { print("The optional has a value! It's \(unwrappedOptional ...

  10. 故障公告:IIS应用程序池停止工作造成博客站点无法访问

    非常抱歉,今天凌晨博客站点负载均衡中所有3台服务器的IIS应用程序池突然停止工作,造成 1:20-7:45 左右博客站点无法正常访问,由此给您带来很大的麻烦,请您谅解. 服务器操作系统是 Window ...