使用java自带des加密算法实现文件加密和字符串加密


在Java中,使用自带的DES加密算法进行文件加密和字符串加密可以通过`javax.crypto`包中的类来实现。以下是一个简单的示例,展示了如何使用DES算法进行字符串加密和解密,以及文件加密和解密的基本框架。

### 字符串加密和解密

首先,我们需要一个密钥生成器(`KeyGenerator`)来生成DES密钥,然后使用这个密钥进行加密和解密。但请注意,由于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 DESUtils {

    private static final String ALGORITHM = "DES";

    // 生成密钥
    public static SecretKey generateKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
        keyGenerator.init(56, new SecureRandom()); // DES密钥长度为56位
        return keyGenerator.generateKey();
    }

    // 加密字符串
    public static String encrypt(String data, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedBytes = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    // 解密字符串
    public static String decrypt(String encryptedData, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] originalBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(originalBytes);
    }

    public static void main(String[] args) throws Exception {
        SecretKey key = generateKey();
        String originalText = "Hello, DES!";
        String encryptedText = encrypt(originalText, key);
        String decryptedText = decrypt(encryptedText, key);

        System.out.println("Original: " + originalText);
        System.out.println("Encrypted: " + encryptedText);
        System.out.println("Decrypted: " + decryptedText);
    }
}

### 文件加密和解密

对于文件加密和解密,你需要将输入流(文件读取)和输出流(文件写入)与`Cipher`对象结合使用。这里不直接给出完整代码,但你可以基于上述字符串加密和解密的逻辑,使用`FileInputStream`和`FileOutputStream`来读取和写入文件数据。

注意:

- 加密和解密时,密钥必须相同。

- DES算法由于其较短的密钥长度,不推荐用于安全敏感的应用。

- 加密后的数据通常是二进制数据,因此使用Base64编码可以方便地在文本格式中存储或传输。

希望这能帮助你理解如何在Java中使用DES算法进行加密和解密。