系列文章目录


目录

系列文章目录

前言

二、实现步骤

1、加密

2、解密

三、测试

总结


前言

        DES(Data Encryption Standard)的主要作用是提供数据的加密保护,确保数据在传输和存储过程中的安全性。‌ 通过使用相同的密钥进行加密和解密,DES确保只有持有密钥的双方能够理解和访问数据内容,从而防止未经授权的访问和篡改‌。本篇主要介绍DES算法在Java(JDK1.8)中如何实现,借助Java标准库或第三方库,非原始实现,较为基础。


一、DES是什么?

       DES算法是一种对称加密算法,其加密和解密使用相同的密钥。‌ DES算法由‌IBM公司在1972年研制,是美国数据加密标准算法。DES算法的基本原理是对称加密,即加密和解密使用相同的密钥。‌

—— 百度AI

二、实现步骤

1、加密

代码如下(示例):

public class EncryptUtils {
    /**
     * DES,Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。
     * <p>
     * 输入:待加密的字符串,8位字符串密码
     * 输出:16进制字符串或Base64编码的字符串密文(常用)
     * 应用:密码管理、数字签名、文件完整性校验
     * 安全性:★★★☆☆
     *
     * @param plainString 明文
     * @param key         秘钥
     * @return cipherString 密文
     */
    public static String desEncrypt(String plainString, String key) {
        String cipherString = null;
        try {
            // 指定算法
            String algorithm = "DES";
            // 创建密钥规范
            SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), algorithm);
            // 获取Cipher对象实例(Java8中DES默认使用ECB模式和PKCS5Padding填充方式,因此下列模式和填充方式无需指定)
            Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding");
            // 初始化Cipher为加密模式
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
            // 获取加密byte数组
            byte[] cipherBytes = cipher.doFinal(plainString.getBytes(StandardCharsets.UTF_8));
            // 输出为Base64编码
            cipherString = Base64.getEncoder().encodeToString(cipherBytes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cipherString;
    }
}

2、解密

代码如下(示例):

public class EncryptUtils {
    /**
     * DES,Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。
     * <p>
     * 输入:密文,8位字符串密码
     * 输出:明文字符串
     * 应用:密码管理、数字签名、文件完整性校验
     * 安全性:★★★☆☆
     *
     * @param cipherString 密文
     * @param key          秘钥
     * @return plainString 明文
     */
    public static String desDecrypt(String cipherString, String key) {
        String plainString = null;
        try {
            // 指定算法
            String algorithm = "DES";
            // 创建密钥规范
            SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), algorithm);
            // 获取Cipher对象实例(Java8中DES默认使用ECB模式和PKCS5Padding填充方式,因此下列模式和填充方式无需指定)
            Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding");
            // 初始化Cipher为解密模式
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
            // 获取加密byte数组
            byte[] cipherBytes = cipher.doFinal(Base64.getDecoder().decode(cipherString));
            // 输出为字符串
            plainString = new String(cipherBytes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return plainString;
    }
}

三、测试

代码如下(示例):

public class EncryptUtils {
    ...
 
    public static void main(String[] args) {
        String plainString = "hello world, hello java!";
        String desEncrypt = desEncrypt(plainString, "12345678");
        String desDecrypt = desDecrypt(desEncrypt, "12345678");
        System.out.println("--------------------------- des");
        System.out.println("加密前: " + plainString);
        System.out.println("加密后: " + desEncrypt);
        System.out.println("解密后: " + desDecrypt);
    }
}

运行截图

某网站运行截图


总结

        以上就是今天要讲的内容,本文仅仅简单介绍了DES加密算法在Java中的实现方式,各个加密算法的对比及总结请见本文系列文章汇总篇,水平有限,难免出错,仅供参考,不喜勿喷,感谢!更多内容请百度和ChatGPT!

更多推荐