zoukankan      html  css  js  c++  java
  • Java中的AES加解密

    直接上代码,Base64使用的是Java8的方法,如没有,替换即可

    KEY:即密码

    IV:即偏移量,可自订,十六位

    加密方式:AES/CBC/PKCS5Padding,128位加密

    如果想用256位和PKCS7Padding需要额外导入包

    import javax.crypto.*;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    import java.security.InvalidAlgorithmParameterException;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.security.SecureRandom;
    import java.util.Base64;
    
    /**
     * 加解密工具
     *
     * @author hackyo
     * Created on 2017/12/13 18:33.
     */
    public final class Encrypt {
    
        private static final String CBC_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
        private static final String KEY = "aaaaaaaa";
        private static final String IV = "abcdefghijklm123";
        private static SecretKey secretKey;
    
        static {
            try {
                KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
                keyGenerator.init(128, new SecureRandom(KEY.getBytes()));
                secretKey = new SecretKeySpec(keyGenerator.generateKey().getEncoded(), "AES");
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            String original = "加密我";
            String encodedText = aesEncode(original);
            System.out.println("密文(Base64加密后的密文)" + encodedText);
            System.out.println("原文(解密后)" + aesDecode(encodedText));
        }
    
        /**
         * AES加密
         *
         * @param original 原文
         * @return 密文
         */
        public static String aesEncode(String original) {
            try {
                Cipher cipher = Cipher.getInstance(CBC_CIPHER_ALGORITHM);
                cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(IV.getBytes()));
                return Base64.getEncoder().encodeToString(cipher.doFinal(original.getBytes()));
            } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * AES解密
         *
         * @param ciphertext 密文
         * @return 原文
         */
        public static String aesDecode(String ciphertext) {
            try {
                Cipher cipher = Cipher.getInstance(CBC_CIPHER_ALGORITHM);
                cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(IV.getBytes()));
                return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)));
            } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) {
                e.printStackTrace();
            }
            return null;
        }
    
    }
  • 相关阅读:
    ●BZOJ 2669 [cqoi2012]局部极小值
    ●HDU 6021 MG loves string
    试试数学公式~
    ●BZOJ 3622 已经没有什么好害怕的了
    ●BZOJ 2560 串珠子
    ●BZOJ 4361 isn
    ●BZOJ 2393 Cirno的完美算数教室
    ●BZOJ 1042 [HAOI2008]硬币购物
    ●BZOJ 2839 集合计数
    【LG2481】[SDOI2011]拦截导弹
  • 原文地址:https://www.cnblogs.com/hackyo/p/8034709.html
Copyright © 2011-2022 走看看