带偏移量的加密工具类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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章