java使用des加密解密示例分享


在Java中,使用DES加密和解密数据是一个常见的安全需求。下面是一个简单的DES加密和解密的示例,使用Java的`javax.crypto`包。请注意,DES由于其较短的密钥长度(56位有效密钥长度),在现代安全标准下被认为是较弱的加密算法,但在一些特定场景下仍然可以使用。


import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;

public class DESEncryptDecryptExample {

    // DES密钥长度是56位,但通常使用8字节(64位)的密钥数据,其中有一位用于奇偶校验
    private static final int KEY_SIZE = 8;

    public static void main(String[] args) throws Exception {
        // 生成密钥
        SecretKey secretKey = generateKey();

        // 待加密的字符串
        String originalText = "Hello, DES Encryption!";

        // 加密
        String encryptedText = encrypt(originalText, secretKey);
        System.out.println("Encrypted Text: " + encryptedText);

        // 解密
        String decryptedText = decrypt(encryptedText, secretKey);
        System.out.println("Decrypted Text: " + decryptedText);
    }

    // 生成DES密钥
    private static SecretKey generateKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
        keyGenerator.init(KEY_SIZE, new SecureRandom());
        return keyGenerator.generateKey();
    }

    // 加密方法
    private static String encrypt(String data, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedBytes = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    // 解密方法
    private static String decrypt(String encryptedData, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] originalBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(originalBytes);
    }
}

**注意**:

- 在这个示例中,我使用了`Base64`编码来将加密后的字节数据转换为字符串,因为加密后的数据是二进制格式,直接以字符串形式展示可能会出现乱码。

- DES算法由于密钥长度较短,现在更推荐使用AES等更安全的加密算法。

- 请确保在生产环境中正确处理异常和错误,上面的示例为了简洁性而省略了详细的异常处理。