zoukankan      html  css  js  c++  java
  • AES

    import org.apache.commons.codec.binary.Base64;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    
    public class AesEncryptUtil {
    
        //使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同!
        private static String KEY = "1234567890123456";
    
        private static String IV = "1234567890123456";
    
    
        /**
         * 加密方法
         *
         * @param data 要加密的数据
         * @param key  加密key
         * @param iv   加密iv
         * @return 加密的结果
         * @throws Exception
         */
        public static String encrypt(String data, String key, String iv) throws Exception {
            try {
    
                Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码方式"NoPadding PkcsPadding
                int blockSize = cipher.getBlockSize();
    
                byte[] dataBytes = data.getBytes();
                int plaintextLength = dataBytes.length;
                if (plaintextLength % blockSize != 0) {
                    plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
                }
    
                byte[] plaintext = new byte[plaintextLength];
                System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
    
                SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
                IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
    
                cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
                byte[] encrypted = cipher.doFinal(plaintext);
    
                return new Base64().encodeToString(encrypted);
    
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    
        /**
         * 解密方法
         *
         * @param data 要解密的数据
         * @param key  解密key
         * @param iv   解密iv
         * @return 解密的结果
         * @throws Exception
         */
        public static String desEncrypt(String data, String key, String iv) throws Exception {
            try {
                byte[] encrypted1 = new Base64().decode(data);
    
                Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
                SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
                IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
    
                cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
    
                byte[] original = cipher.doFinal(encrypted1);
                String originalString = new String(original);
                return originalString;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    
        /**
         * 使用默认的key和iv加密
         *
         * @param data
         * @return
         * @throws Exception
         */
        public static String encrypt(String data) throws Exception {
            return encrypt(data, KEY, IV);
        }
    
        /**
         * 使用默认的key和iv解密
         *
         * @param data
         * @return
         * @throws Exception
         */
        public static String desEncrypt(String data) throws Exception {
            return desEncrypt(data, KEY, IV);
        }
    
    
        /**
         * 测试
         */
        public static void main(String args[]) throws Exception {
    
            String test1 = "sa";
            String test = new String(test1.getBytes(), "UTF-8");
            String data = null;
            String key = KEY;
            String iv = IV;
            // /g2wzfqvMOeazgtsUVbq1kmJawROa6mcRAzwG1/GeJ4=
            data = encrypt(test, key, iv);
            System.out.println("数据:" + test);
            System.out.println("加密:" + data);
            String jiemi = desEncrypt(data, key, iv).trim();
            System.out.println("解密:" + jiemi);
        }
    }
    

      

  • 相关阅读:
    155. 最小栈
    160. 相交链表
    PAT 1057 Stack
    PAT 1026 Table Tennis
    PAT 1017 Queueing at Bank
    PAT 1014 Waiting in Line
    PAT 1029 Median
    PAT 1016 Phone Bills
    PAT 1010 Radix
    PAT 1122 Hamiltonian Cycle
  • 原文地址:https://www.cnblogs.com/Alexr/p/13721461.html
Copyright © 2011-2022 走看看