一、DES算法

DES(Data Encryption Standard):数据加密标准,它是由IBM公司研制的一种对称密码算法

DES是一个分组加密算法,典型的DES以64位分组对数据加密,加密和解密用的是用一个算法。

总长度64位8字节,其中8位作为校验码,不参与加密算法。

二、秘钥与加密算法

秘钥是一种参数(它是在明文转换为密文或将密文转换为明文的算法中输入的数据)

加密算法是明文转换为密文的变换函数,同样的秘钥可以用不同的加密算法,得到的密文就不一样

比如凯撒密码,就是将字母循环后移n位,这个n就是一个秘钥,循环后移的方法叫做算法

三、DES加密流程

四、DES加密与解密

提供原始秘钥:长度64位,8字节

    @Test
    public void testDES() throws Exception {
        // 明文
        String plainText = "abcd";
        System.out.println("明文:" + plainText);

        // 提供原始秘钥:长度64位,8字节
        String originKey = "12345678";
        // 根据给定的字节数组构建一个秘钥
        SecretKeySpec key = new SecretKeySpec(originKey.getBytes(), "DES");

        // 加密
        // 1.获取加密算法工具类
        Cipher cipher = Cipher.getInstance("DES");
        // 2.对工具类对象进行初始化,
        // mode:加密/解密模式
        // key:对原始秘钥处理之后的秘钥
        cipher.init(Cipher.ENCRYPT_MODE, key);
        // 3.用加密工具类对象对明文进行加密
        byte[] encipherByte = cipher.doFinal(plainText.getBytes());
        // 防止乱码,使用Base64编码
        String encode = Base64.encodeBase64String(encipherByte);
        System.out.println("加密:" + encode);

        // 解密
        // 2.对工具类对象进行初始化
        cipher.init(Cipher.DECRYPT_MODE, key);
        // 3.用加密工具类对象对密文进行解密
        byte[] decode = Base64.decodeBase64(encode);
        byte[] decipherByte = cipher.doFinal(decode);
        String decipherText = new String(decipherByte);
        System.out.println("解密:" + decipherText);
    }

结果:

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐