• Java code lib aes 加解密


    Java aes 加解密

    /**
     * Created by LvJianwei on 2018/2/8.
     */
    
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    import javax.xml.bind.DatatypeConverter;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    
    
    /**
     * @program: reflection
     * @description: AES
     * @author: LvJianwei
     * @create: 2018-02-08 15:07
     **/
    public class AESDemo {
        public static void main(String[] args) {
            String key="i will always love you";
            byte[] keyBytes=initSecretKey();
            String plainText="have a nice day";
            System.out.println("plainText:"+plainText);
    
            byte[] encryptedBytes=encrypt(DEFAULT_CIPHER_ALGORITHM,keyBytes,KEY_ALGORITHM,plainText);
            System.out.println("encryptedText:"+Arrays.toString(encryptedBytes));
            byte[] decryptedBytes=decrypt(DEFAULT_CIPHER_ALGORITHM,keyBytes,KEY_ALGORITHM,encryptedBytes);
            System.out.println("decryptedText:"+new String(decryptedBytes));
        }
    
        /**
         * algorithm
         */
        private static final String KEY_ALGORITHM = "AES";
        private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
        /**
         * generate key
         * @return byte[] key
         * @throws Exception
         */
        public static byte[] initSecretKey() {
            //返回生成指定算法的秘密密钥的 KeyGenerator 对象
            KeyGenerator kg = null;
            try {
                kg = KeyGenerator.getInstance(KEY_ALGORITHM);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
                return new byte[0];
            }
            //初始化此密钥生成器,使其具有确定的密钥大小
            //AES 要求密钥长度为 128
            kg.init(128);
            //生成一个密钥
            SecretKey secretKey = kg.generateKey();
            return secretKey.getEncoded();
        }
        
        /**
         * AESEncrypt
         * @param cipherAlgorithm   transformation
         * @param keyBytes  key byte array
         * @param keyAlgorithm  SecretKeySpec's algorithm
         * @param plainText text to be encrypted
         * @return
         */
        public static byte[] encrypt(String cipherAlgorithm, byte[] keyBytes, String keyAlgorithm, String plainText) {
            try {
                Cipher cipher = Cipher.getInstance(cipherAlgorithm);
    
                String keyStr= DatatypeConverter.printBase64Binary(keyBytes);
                SecretKeySpec keySpec = new SecretKeySpec(keyBytes, keyAlgorithm);
    
                cipher.init(Cipher.ENCRYPT_MODE, keySpec);
    
                byte[] encyptedBytes = cipher.doFinal(plainText.getBytes());
                return encyptedBytes;
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * decrypt
         * @param cipherAlgorithm transformation
         * @param keyBytes key
         * @param keyAlgorithm SecretKeySpec's algorithm
         * @param encyptedBytes encypted byte array
         * @return
         */
        public static byte[] decrypt(String cipherAlgorithm, byte[] keyBytes, String keyAlgorithm, byte[] encyptedBytes) {
            try {
                Cipher cipher = Cipher.getInstance(cipherAlgorithm);
    
                String keyStr= DatatypeConverter.printBase64Binary(keyBytes);
                SecretKeySpec keySpec = new SecretKeySpec(keyBytes, keyAlgorithm);
                cipher.init(Cipher.DECRYPT_MODE, keySpec);
                byte[] decryptedBytes = cipher.doFinal(encyptedBytes);
                return decryptedBytes;
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }
  • 相关阅读:
    十大最容易找工作的编程语言
    阿里云主机优惠购买后试用感受(送阿里云代金券)
    【目录】整理
    【git】关联远程分支
    【java】java基本用法记录
    【svn】本地文件夹同步到SVN
    【算法】Bert预训练源码阅读
    【算法】Attention is all you need
    【算法】Normalization
    【算法】BILSTM+CRF中的条件随机场
  • 原文地址:https://www.cnblogs.com/lvjianwei/p/8432679.html
Copyright © 2020-2023  润新知