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 加密/解密
最新推荐文章于 2025-03-03 00:15:00 发布