package cn.shinkong.cxf.server.impl;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import org.apache.ws.security.util.Base64;
public class Encryption_AES {
private Cipher cipher = null; // 加密算法
private SecretKeySpec skeySpec = null;
/**
* 加密,使用指定數據源生成密鑰,使用用戶數據作爲算法參數進行AES加密
* @param key 加密密鑰
* @param value 加密的數據
* @return
*/
public String encrypt(String key,String value) {
byte[] raw = null;
byte[] encrypted = null;
try {
raw = key.getBytes("utf-8");
skeySpec = new SecretKeySpec(raw, "AES");
cipher = Cipher.getInstance("AES");// "算法/模式/補碼方式"
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
encrypted = cipher.doFinal(value.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return Base64.encode(encrypted);// 此處使用BASE64做轉碼功能,同時能起到2次加密的作用。
}
/**
* 解密,對生成的16進制的字符串進行解密
*
* @param value
* 解密的數據
* @return
*/
public String decrypt(String key,String value) {
try {
byte[] raw = key.getBytes("utf-8");
skeySpec = new SecretKeySpec(raw, "AES");
cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] encrypted1 = Base64.decode(value);// 先用base64解密
try {
byte[] original = cipher.doFinal(encrypted1);
return new String(original, "utf-8");
} catch (Exception e) {
System.out.println(e.toString());
return null;
}
} catch (Exception ex) {
System.out.println(ex.toString());
return null;
}
}
}
java AES 加密/解密
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.