DES加解密java

前言

数据加密标准(Data Encryption Standard,DES)是一种对称加密算法,它使用相同的密钥进行加密和解密。DES算法在1977年被美国联邦政府正式采用,并在商业上广泛应用。本文将介绍如何使用Java实现DES加解密,并提供相应的代码示例。

DES算法原理

DES算法的加密和解密分别由两个过程组成,称为加密轮数和解密轮数。加密轮数使用相同的轮函数,但密钥逆序排列。解密轮数与加密轮数相反,使用相同的轮函数和密钥。DES算法的主要步骤如下:

  1. 初始置换(Initial Permutation):将明文按照一定规则进行置换。
  2. 16轮加密/解密:将明文(密文)和子密钥进行一系列操作,每轮操作包括扩展置换、异或运算、S盒代替、P盒替换和置换操作。
  3. 逆置换(Final Permutation):对最后一轮操作的结果进行逆置换,得到最终的密文(明文)。

Java实现DES加解密

加密函数

以下是Java实现DES加密的示例代码:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public class DESUtils {

    private static final String ALGORITHM = "DES";

    public static String encrypt(String plainText, String key) throws Exception {
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }
}

解密函数

以下是Java实现DES解密的示例代码:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public class DESUtils {

    private static final String ALGORITHM = "DES";

    public static String decrypt(String encryptedText, String key) throws Exception {
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);

        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
        return new String(decryptedBytes);
    }
}

流程图

以下是DES加解密的流程图:

flowchart TD
    start[开始]
    initialize[初始化密钥]
    generateKeys[生成子密钥]
    encrypt[加密]
    decrypt[解密]
    end[结束]

    start --> initialize
    initialize --> generateKeys
    generateKeys --> encrypt
    encrypt --> decrypt
    decrypt --> end

示例代码

以下是使用DES加解密的示例代码:

public class Main {
    private static final String PLAIN_TEXT = "Hello, DES!";
    private static final String KEY = "s3cr3tk3y";

    public static void main(String[] args) {
        try {
            String encryptedText = DESUtils.encrypt(PLAIN_TEXT, KEY);
            System.out.println("Encrypted Text: " + encryptedText);

            String decryptedText = DESUtils.decrypt(encryptedText, KEY);
            System.out.println("Decrypted Text: " + decryptedText);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出结果:

Encrypted Text: f7sK4a6bmzg=
Decrypted Text: Hello, DES!

总结

本文介绍了DES加解密算法的原理,并提供了使用Java实现DES加解密的示例代码。DES算法是一种经典的对称加密算法,通过密钥进行加密和解密操作。在实际应用中,我们可以使用DES算法来保护敏感数据的安全性。希望本文对你理解和使用DES加解密算法有所帮助。