zoukankan      html  css  js  c++  java
  • java加解密算法--DES

    • ECB
    import javax.crypto.*;
    import javax.crypto.spec.DESKeySpec;
    import java.io.IOException;
    import java.security.InvalidAlgorithmParameterException;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.security.spec.InvalidKeySpecException;
    
    public class Decrypt {
    
        public static byte[] initSecretKey() throws NoSuchAlgorithmException {
            //指定算法秘钥生成器
            KeyGenerator kg = KeyGenerator.getInstance("des");
            //初始化秘钥生成器,使其具有确定到秘钥大小
            kg.init(56);
            //生成秘钥
            SecretKey secretkey = kg.generateKey();
            return secretkey.getEncoded();
        }
    
        public static byte[] encrypt(byte[] key, String src) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
            //jdk初始化秘钥转化des秘钥
            DESKeySpec desKeySpec = new DESKeySpec(key);
            //创建秘钥工厂实例
            SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("des");
            //生成秘钥
            SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);
    
            /**
             * 加密实际操作Cipher
             */
            //创建Cipher对象
            Cipher cipher = Cipher.getInstance("des/cbc/PKCS5Padding");
            //初始化Cipher
            cipher.init(Cipher.ENCRYPT_MODE,secretKey);
            byte[] data = src.getBytes();
            //加密
            byte[] encryptedData = cipher.doFinal(data);
            return encryptedData;
    
        }
    
        public static void main(String[] args) throws NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException, BadPaddingException, InvalidKeySpecException, InvalidKeyException, IOException, InvalidAlgorithmParameterException {
            //byte[] secretKey = initSecretKey();
            //或者代码中约定key
            String key = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4";
            byte[] secretKey = key.getBytes();
            String str = "abc";
            byte[] encryptedData = encrypt(secretKey, str);
            String decrypteData = decrypt(secretKey, encryptedData);
        }
    
        public static String decrypt(byte[] key,byte[] encryptedData) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
            //jdk初始化秘钥转化des秘钥
            DESKeySpec desKeySpec = new DESKeySpec(key);
            //创建秘钥工厂实例
            SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("des");
            //生成秘钥
            SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);
            /** * 解密实际操作Cipher */
            //创建Cipher对象
            Cipher cipher = Cipher.getInstance("des/cbc/PKCS5Padding");
            //初始化Cipher
            cipher.init(Cipher.DECRYPT_MODE,secretKey);
            //加密
            byte[] dencryptedData = cipher.doFinal(encryptedData);
            return new String(dencryptedData);
        }
    }   
    • CBC

    与ECB差别,加解密都要使用初始化向量,且初始化向量一致   

    import javax.crypto.*;
    import javax.crypto.spec.DESKeySpec;
    import javax.crypto.spec.IvParameterSpec;
    import java.io.IOException;
    import java.security.InvalidAlgorithmParameterException;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.security.spec.InvalidKeySpecException;
    
    public class encrypt {
    
        public static byte[] initSecretKey() throws NoSuchAlgorithmException {
            //指定算法秘钥生成器
            KeyGenerator kg = KeyGenerator.getInstance("des");
            //初始化秘钥生成器,使其具有确定到秘钥大小
            kg.init(56);
            //生成秘钥
            SecretKey secretkey = kg.generateKey();
            return secretkey.getEncoded();
        }
    
        public static byte[] encrypt(byte[] key, String src,byte[] keyIv) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
            //jdk初始化秘钥转化des秘钥
            DESKeySpec desKeySpec = new DESKeySpec(key);
            //创建秘钥工厂实例
            SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("des");
            //生成秘钥
            SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);
    
            /**
             * 加密实际操作Cipher
             */
            //创建Cipher对象
            Cipher cipher = Cipher.getInstance("des/cbc/PKCS5Padding");
            //创建初始化向量
            IvParameterSpec iv = new IvParameterSpec(keyIv);
            //初始化Cipher
            cipher.init(Cipher.ENCRYPT_MODE,secretKey,iv);
            byte[] data = src.getBytes();
            //加密
            byte[] encryptedData = cipher.doFinal(data);
            return encryptedData;
    
        }
    
        public static void main(String[] args) throws NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException, BadPaddingException, InvalidKeySpecException, InvalidKeyException, IOException, InvalidAlgorithmParameterException {
            //byte[] secretKey = initSecretKey();
            //或者代码中约定key
            String key = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4";
            byte[] secretKey = key.getBytes();
            byte[] iv = {1, 2, 3, 4, 5, 6, 7, 8};
            String str = "abc";
            byte[] encryptedData = encrypt(secretKey, str,iv);
            String decrypteData = decrypt(secretKey, encryptedData,iv);
        }
    
        public static String decrypt(byte[] key,byte[] encryptedData,byte[] keyIv) throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
            //jdk初始化秘钥转化des秘钥
            DESKeySpec desKeySpec = new DESKeySpec(key);
            //创建秘钥工厂实例
            SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("des");
            //生成秘钥
            SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);
            /** * 解密实际操作Cipher */
            //创建Cipher对象
            Cipher cipher = Cipher.getInstance("des/cbc/PKCS5Padding");
            //创建初始化向量
            IvParameterSpec iv = new IvParameterSpec(keyIv);
            //初始化Cipher
            cipher.init(Cipher.DECRYPT_MODE,secretKey,iv);
            //加密
            byte[] dencryptedData = cipher.doFinal(encryptedData);
            return new String(dencryptedData);
        }
    }
    

      

    DES与3DES同样到工作模式和填充模式相同,它们加解密区别:

    • jdk初始化秘钥转化des秘钥

      DES:

    DESKeySpec desKeySpec = new DESKeySpec(key);
    

      3DES:

    DESedeKeySpec spec = new DESedeKeySpec(key);
    
    • 创建秘钥工厂实例  

      DES:

    SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("des");

      3DES:

    SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
    
    • 密钥长度

      DES:56

      3DES:168

  • 相关阅读:
    C函数
    iOS开发- 蓝牙后台接收数据(BLE4.0)
    相册权限 第一次安装、用户是否授权
    使用免费的产品搭建直播系统
    搭建HTTP Live Streaming直播系统
    HTTP Live Streaming直播(iOS直播)技术分析与实现
    个人工作总结03
    个人工作总结02
    个人工作总结01
    第七周学习进度
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/12297194.html
Copyright © 2011-2022 走看看