3DES加密

2017-11-27  本文已影响0人  夜月行者

简介

也就是 3 重 DES — — Triple DES。它相当于是对每个数据块应用三次 DES 加密算法。由于计算机运算能力的增强,原版 DES 密码的密钥长度变得容易被暴力破解;3DES 即是设计用来提供一种相对简单的方法,即通过增加 DES 的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

原理

使用 3 条 56 位的密钥对数据进行三次加密。3DES(即 Triple DES)是 DES 向 AES 过渡的加密算法(1999年,NIST 将 3-DES 指定为过渡的加密标准)。

输出

入口参数有三个:key、data、mode。

java demo

public static byte[] Des333() {
 
        String data = "1234123";
        String key = "123456781234567812345678";//密钥长度必须大于8个字节
        String iv = "12341234";
 
        try {
            // 从原始密钥数据创建DESKeySpec对象
            DESedeKeySpec dks = new DESedeKeySpec(key.getBytes());
 
            // 创建一个密匙工厂,然后用它把DESKeySpec转换成
            // 一个SecretKey对象
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
            SecretKey secretKey = keyFactory.generateSecret(dks);
 
            // Cipher对象实际完成加密操作
            Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
            //使用nopadding模式,data必须为8字节的整数倍
//             Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
 
            // 用密匙初始化Cipher对象
            IvParameterSpec param = new IvParameterSpec(iv.getBytes());
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, param);
 
            // 执行加密操作
            byte encryptedData[] = cipher.doFinal(data.getBytes());
            System.out.println(str16(encryptedData).length());
 
            return encryptedData;
        } catch (Exception e) {
            System.err.println("出错!");
            e.printStackTrace();
        }
 
        return null;
    }

上一篇下一篇

猜你喜欢

热点阅读