zoukankan      html  css  js  c++  java
  • AES 加密

    JDK提供了算法,代码很简单,拿走用吧……

    import java.security.Key;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    /**
     * 对称加密
     * 
     * @author ChenSS 2016/11/30
     * @version 1.0
     */
    public class AES {
        private static IvParameterSpec iv = new IvParameterSpec("1234567890654321".getBytes());
        
        public static void main(String[] args) {
            try {
                String key = MD5.hexBit16("a");
                String encryStr = AES.encryptBase64("abcd", key);
                System.out.println("密文:" + encryStr);
                String decryStr = AES.decryptBase64(encryStr, key);
                System.out.println("明文:" + decryStr);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        public static String encryptBase64(String data, String publicKey) throws Exception {
            return Base64.byteArrayToBase64(encrypt(data.getBytes(), publicKey));
        }
    
        public static String decryptBase64(String encryptedData, String privateKey) throws Exception {
            return new String(decrypt(Base64.base64ToByteArray(encryptedData), privateKey));
        }
    
        public static String encryptHex(String data, String publicKey) throws Exception {
            return Hex.encodeToString(encrypt(data.getBytes(), publicKey));
        }
        
        public static String decryptHex(String encryptedData, String privateKey) throws Exception {
            return new String(decrypt(Hex.decode(encryptedData.toCharArray()), privateKey));
        }
        
        public static IvParameterSpec getIV(byte[] iv){
            return new IvParameterSpec(iv);
        }
        
        public static Key getKey(byte[] key){
            return new SecretKeySpec(key, "AES");
        }
        
        public static byte[] encrypt(byte[] data, String key) throws Exception{
            return encrypt(data, new SecretKeySpec(key.getBytes(), "AES"),iv);
        }
        
        public static byte[] decrypt(byte[] data, String key) throws Exception{
            return decrypt(data, new SecretKeySpec(key.getBytes(), "AES"),iv);
        }
        
        /**
         * 加密
         */
        public static byte[] encrypt(byte[] data, Key keySpec, IvParameterSpec iv) throws Exception {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv);
            return cipher.doFinal(data);
        }
        
        /**
         * 解密
         */
        public static byte[] decrypt(byte[] data, Key keySpec, IvParameterSpec iv) throws Exception {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, keySpec, iv);
            return cipher.doFinal(data);
        }
    }
  • 相关阅读:
    tcp/udp高并发和高吐吞性能测试工具
    beetle.express针对websocket的高性能处理
    深度神经网络(DNN)反向传播算法(BP)
    深度神经网络(DNN)模型与前向传播算法
    分解机(Factorization Machines)推荐算法原理
    用Spark学习矩阵分解推荐算法
    SimRank协同过滤推荐算法
    矩阵分解在协同过滤推荐算法中的应用
    协同过滤推荐算法总结
    用Spark学习FP Tree算法和PrefixSpan算法
  • 原文地址:https://www.cnblogs.com/chenss15060100790/p/9080497.html
Copyright © 2011-2022 走看看