帶偏移量的加密工具類AES/CBC/PKCS5Padding

加密工具類

需要時自拷

public class AESUtils {
    private final String CIPHERMODEPADDING = "AES/CBC/PKCS5Padding";//加密編碼
    
    private static String ivParameter = "companyrunjinkej";//偏移量可更改 必須爲16位
    private String sKey = "runjinkejcompany";// 密鑰必須爲16位,可更改爲自己的密鑰

    private SecretKeySpec skforAES = null;
   
    private byte[] iv = ivParameter.getBytes();
    private IvParameterSpec IV;
    
    private static AESUtils instance = null;
    //獲取實例
    public static AESUtils getInstance() {
        if (instance == null) {
            synchronized (AESUtils.class) {
                if (instance == null) {
                    instance = new AESUtils();
                }
            }
        }
        return instance;
    }
    public AESUtils() {
        byte[] skAsByteArray;
        try {
            skAsByteArray = sKey.getBytes("ASCII");
            skforAES = new SecretKeySpec(skAsByteArray, "AES");//轉換爲AES專用密鑰
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        IV = new IvParameterSpec(iv);
    }

    /**
     * 加密
     * @param plaintext 加密明文
     * @return
     */
    public byte[] encrypt(String plaintext) {
        return encrypt(CIPHERMODEPADDING, skforAES, IV, plaintext.getBytes());
    }

    /**
     * 解密
     * @param ciphertext 解密密文
     * @return
     */
    public  String decrypt(byte[] ciphertext) {
        return new String(decrypt(CIPHERMODEPADDING, skforAES, IV, ciphertext));
    }

    private byte[] encrypt(String cmp, SecretKey sk, IvParameterSpec IV, byte[] msg) {
        try {
            Cipher c = Cipher.getInstance(cmp);
            c.init(Cipher.ENCRYPT_MODE, sk, IV);
            return c.doFinal(msg);
        } catch (Exception nsae) {
        }
        return null;
    }

    private byte[] decrypt(String cmp, SecretKey sk, IvParameterSpec IV, byte[] ciphertext) {
        try {
            Cipher c = Cipher.getInstance(cmp);
            c.init(Cipher.DECRYPT_MODE, sk, IV);
            return c.doFinal(ciphertext);
        } catch (Exception nsae) {
        }
        return null;
    }
}

測試類

public class testAes {
    public static void main(String[] args) {
        AESUtils instance = AESUtils.getInstance();
        byte[] encrypt = instance.encrypt("國際兒童節");//加密
		System.out.println("加密後:"+new String(encrypt));
		 
        String decrypt = instance.decrypt(encrypt);//解密
        System.out.println("解密後:"+decrypt);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章