天天看点

java

public class AESUtils {

    public static final String AES_GIV   = "ASwsqwerty1uDs";//定义16为偏移向量

    public static Log          logger    = LogFactory.getLog(AESUtils.class);

    /**

     * 加密

     * @param String sSrc需要加密的参数

     * @param String sKey密钥16位长度的String

     * @return String 加密后的数据

     */

    public static String Encrypt(String sSrc, String sKey) throws Exception {

        if (sKey == null) {

            logger.warn("Key为空null");

            return null;

        }

        // 判断Key是否为16位

        if (sKey.length() != 16) {

            logger.warn("Key长度不是16位");

        byte[] raw = sKey.getBytes();

        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/补码方式"

        IvParameterSpec iv = new IvParameterSpec(AES_GIV.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度

        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);

        byte[] encrypted = cipher.doFinal(sSrc.getBytes());

        return new BASE64Encoder().encode(encrypted);// 此处使用BASE64做转码功能,同时能起到2次加密的作用。

    }

     * 解密

     * @param String sSrc需要解密的参数

     * @return String 解密后的数据

    public static String Decrypt(String sSrc, String sKey) throws Exception {

        try {

            // 判断Key是否正确

            if (sKey == null) {

                logger.warn("Key为空null");

                return null;

            }

            // 判断Key是否为16位

            if (sKey.length() != 16) {

                logger.warn("Key长度不是16位");

            byte[] raw = sKey.getBytes("ASCII");

            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

            IvParameterSpec iv = new IvParameterSpec(AES_GIV.getBytes());

            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);

            byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密

            try {

                byte[] original = cipher.doFinal(encrypted1);

                String originalString = new String(original);

                return originalString;

            } catch (Exception e) {

                logger.error("Decrypt error", e);

        } catch (Exception e) {

            logger.error("Decrypt error", e);

--------------------------测试--------------------

测试时传密钥和需要加解密的参数