java AES 加密/解密

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;
		}
	}

}

發佈了4 篇原創文章 · 獲贊 14 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章