DES加密

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

简介

称为“Data Encryption Standard”,中文名为“数据加密标准”,是一种使用密钥加密的块算法。DES 算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是 1972 年美国 IBM 公司研制的对称密码体制加密算法。 明文按 64 位进行分组,密钥长 64 位,密钥事实上是 56 位参与 DES 运算(第8、16、24、32、40、48、56、64 位是校验位, 使得每个密钥都有奇数个 1)分组后的明文组和 56 位的密钥按位替代或交换的方法形成密文组的加密方法。

基本原理

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

输出

DES 算法把 64 位的明文输入块变为 64 位的密文输出块,它所使用的密钥也是 64 位
在java中,如果所给的密钥不是64位会进行变换得到64位的。
记住:如果是有padding,如果是明文如果是8字节的整数倍的话,加密的密文长度肯定要增加8个字节,因为要有标识

java demo

java中不同的对象中使用的算法名

 
    public static byte[] CBCEncrypt() {
 
        String data = "123";
        String key = "123123123";//密钥长度必须大于8个字节
        String iv = "12341234";
 
        try {
            // 从原始密钥数据创建DESKeySpec对象
            DESKeySpec dks = new DESKeySpec(key.getBytes());
 
            // 创建一个密匙工厂,然后用它把DESKeySpec转换成
            // 一个SecretKey对象
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(dks);
 
            // Cipher对象实际完成加密操作
            Cipher cipher = Cipher.getInstance("DES/CFB/NoPadding");
            //使用nopadding模式,data必须为8字节的整数倍
//             Cipher cipher = Cipher.getInstance("DES/CBC/NoPadding");
 
            // 用密匙初始化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("DES算法,加密数据出错!");
            e.printStackTrace();
        }
 
        return null;
    }


上一篇下一篇

猜你喜欢

热点阅读