• Java实现AES加密解密


    之前常用两种加密算法:Base64和Md5,前者容易破解,后者不可逆。

    AES采用对称加密方式,破解难度非常大,在可逆的基础上,能很好的保证数据的安全性。

    这里介绍Java中实现AES加密算法的加密与解密实现:

    import org.apache.commons.codec.binary.Base64;
    import org.apache.commons.codec.binary.Hex;
    import org.springframework.util.Base64Utils;
    import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
    
    import javax.crypto.*;
    import javax.crypto.spec.SecretKeySpec;
    import java.io.UnsupportedEncodingException;
    import java.security.Key;
    import java.security.NoSuchAlgorithmException;
    import java.security.SecureRandom;
    
    public class AesUtil {
    
        public static void main(String[] args) throws UnsupportedEncodingException {
            for (int i = 0; i < 10; i++) {
                String key = generateKey(); // 提前生成的一个key
                String ps = encode(key, "123");
                System.out.println("加密: " + ps);
                String res = decode(key, ps);
                System.out.println("解密: " + res);
            }
        }
    
    
        /**
         * 生成key
         * @return
         */
        public static String generateKey() {
            try {
                KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
                keyGenerator.init(new SecureRandom());
                SecretKey secretKey = keyGenerator.generateKey();
                byte[] byteKey = secretKey.getEncoded();
                return Hex.encodeHexString(byteKey);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        /**
         * AES加密
         * @param thisKey
         * @param data
         * @return
         */
        public static String encode(String thisKey, String data) {
            try {
                // 转换KEY
                Key key = new SecretKeySpec(Hex.decodeHex(thisKey),"AES");
                //System.out.println(thisKey);
    
                // 加密
                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
                cipher.init(Cipher.ENCRYPT_MODE, key);
                byte[] result = cipher.doFinal(data.getBytes());
                return Hex.encodeHexString(result);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        /**
         * AES解密
         * @param thisKey
         * @param data
         * @return
         */
        public static String decode(String thisKey, String data) {
            try {
                // 转换KEY
                Key key = new SecretKeySpec(Hex.decodeHex(thisKey),"AES");
                // 解密
                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
                cipher.init(Cipher.DECRYPT_MODE, key);
                byte[] result = cipher.doFinal(Hex.decodeHex(data));
                return new String(result);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return null;
        }
    }
    
  • 相关阅读:
    vim初试(Hello World)
    CSP201809-2 买菜(超简单的方法!!)
    CSP202006-2 稀疏向量
    CSP202012-2 期末预测之最佳阈值
    浮点数表示
    结构体
    全排列-康托展开及逆展开
    CA-031 上手Games101环境 Games101环境怎么配置
    计算机图形学 实验四 AET算法
    计算机图形学 实验三 梁氏裁剪算法
  • 原文地址:https://www.cnblogs.com/eknown/p/11939120.html
Copyright © 2020-2023  润新知