在shiro中也供应了编码,解码,加密,加密算法实现等等一系列的内容。

编码/解码

在org.apache.shiro.codec包中,供应了Base64,16进制等的编码解码工具类的实现。

phphash加密javaShiro加密 HTML

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());

}

}