JAVA AES CBC PKCS5Padding加解密

package com.hzxc.groupactivity.util;

/**
 * Created by hdwang on 2019/1/17.
 */
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;


/**
 *  加密工具類
 */
public class AESUtil {
    private static final Logger logger = LoggerFactory.getLogger(AESUtil.class);

    private static final String KEY_ALGORITHM = "AES";
    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";//默認的加密算法

    /**
     * AES 加密操做
     *
     * @param content 待加密內容
     * @param password 加密密碼
     * @param iv 使用CBC模式,須要一個向量iv,可增長加密算法的強度
     * @return 加密數據
     */
    public static byte[] encrypt(String content, String password,String iv) {
        try {
            //建立密碼器
            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);

            //密碼key(超過16字節即128bit的key,須要替換jre中的local_policy.jar和US_export_policy.jar,不然報錯:Illegal key size)
            SecretKeySpec keySpec = new SecretKeySpec(password.getBytes("utf-8"),KEY_ALGORITHM);

            //向量iv
            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("utf-8"));

            //初始化爲加密模式的密碼器
            cipher.init(Cipher.ENCRYPT_MODE,keySpec,ivParameterSpec);

            //加密
            byte[] byteContent = content.getBytes("utf-8");
            byte[] result = cipher.doFinal(byteContent);

            return result;
        } catch (Exception ex) {
            logger.error(ex.getMessage(),ex);
        }

        return null;
    }

    /**
     * AES 解密操做
     *
     * @param content 密文
     * @param password 密碼
     * @param iv 使用CBC模式,須要一個向量iv,可增長加密算法的強度
     * @return 明文
     */
    public static String decrypt(byte[] content, String password,String iv) {

        try {
            //建立密碼器
            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);

            //密碼key
            SecretKeySpec keySpec = new SecretKeySpec(password.getBytes("utf-8"),KEY_ALGORITHM);

            //向量iv
            IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes("utf-8"));

            //初始化爲解密模式的密碼器
            cipher.init(Cipher.DECRYPT_MODE,keySpec,ivParameterSpec);

            //執行操做
            byte[] result = cipher.doFinal(content);

            return new String(result,"utf-8");
        } catch (Exception ex) {
            logger.error(ex.getMessage(),ex);
        }

        return null;
    }



}

參考網址:html

http://www.javashuo.com/article/p-ggbjttgq-cn.htmljava

相關文章
相關標籤/搜索