java 可逆的加密算法_java实现AES可逆加密算法
package com.hdu.encode;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* AES 是一種可逆加密算法,對用戶的敏感信息加密處理 對原始數(shù)據(jù)進行AES加密后,在進行Base64編碼轉化;
*/
public class AESOperator {
/*
* 加密用的Key 可以用26個字母和數(shù)字組成 此處使用AES-128-CBC加密模式,key需要為16位。
*/
// a0b891c2d563e4f7
private String sKey = "abcdef0123456789";
private String ivParameter = "0123456789abcdef";
private static AESOperator instance = null;
private AESOperator() {
}
public static AESOperator getInstance() {
if (instance == null)
instance = new AESOperator();
return instance;
}
// 加密
public String encrypt(String sSrc){
String result = "";
try {
Cipher cipher;
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());// 使用CBC模式,需要一個向量iv,可增加加密算法的強度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
result = new BASE64Encoder().encode(encrypted);
} catch (Exception e) {
e.printStackTrace();
}
// 此處使用BASE64做轉碼。
return result;
}
// 解密
public String decrypt(String sSrc){
try {
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
public static void main(String[] args){
// 需要加密的字串
String cSrc = "測試";
System.out.println(cSrc + " 長度為" + cSrc.length());
// 加密
long lStart = System.currentTimeMillis();
String enString = AESOperator.getInstance().encrypt(cSrc);
System.out.println("加密后的字串是:" + enString + "長度為" + enString.length());
long lUseTime = System.currentTimeMillis() - lStart;
System.out.println("加密耗時:" + lUseTime + "毫秒");
// 解密
lStart = System.currentTimeMillis();
String DeString = AESOperator.getInstance().decrypt(enString);
System.out.println("解密后的字串是:" + DeString);
lUseTime = System.currentTimeMillis() - lStart;
System.out.println("解密耗時:" + lUseTime + "毫秒");
}
}
總結
以上是生活随笔為你收集整理的java 可逆的加密算法_java实现AES可逆加密算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不能安装系统文件怎么办啊 系统文件无法安
- 下一篇: win10系统怎么设置不更新系统更新 如