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