文件加解密Java

文件加密是一种将文件内容转换为不可读的形式,以保护文件中的数据不被未经授权的人员访问的过程。而文件解密则是将加密后的文件内容恢复为原始的可读形式。在Java中,我们可以使用各种加解密算法来实现文件的加解密操作。

加密算法

Java提供了许多加密算法的实现,例如对称加密算法(如DES、AES)、非对称加密算法(如RSA)、散列算法(如MD5、SHA-1)等。下面我们以AES对称加密算法为例,来演示文件的加密过程。

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.Key;

public class FileEncryption {
    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = "AES";

    public static void encryptFile(String sourceFile, String encryptedFile, String key) throws Exception {
        Key secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        try (BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(sourceFile));
             BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(encryptedFile))) {
            byte[] buffer = new byte[4096];
            int bytesRead;

            while ((bytesRead = inputStream.read(buffer)) != -1) {
                byte[] encryptedBytes = cipher.update(buffer, 0, bytesRead);
                outputStream.write(encryptedBytes);
            }

            byte[] encryptedBytes = cipher.doFinal();
            outputStream.write(encryptedBytes);
        }
    }

    public static void main(String[] args) {
        String sourceFile = "source.txt";
        String encryptedFile = "encrypted.txt";
        String key = "mySecretKey";

        try {
            encryptFile(sourceFile, encryptedFile, key);
            System.out.println("File encrypted successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码中,我们首先定义了加密算法和转换方式,然后创建了一个SecretKeySpec对象,用于生成加密密钥。接下来,我们使用Cipher类来进行加密操作。在加密文件时,我们使用了BufferedInputStream来读取原始文件的内容,并使用BufferedOutputStream将加密后的内容写入到加密文件中。

解密算法

解密算法与加密算法相似,只需将加密操作修改为解密操作即可。下面是一个使用AES算法进行文件解密的示例:

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.Key;

public class FileDecryption {
    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = "AES";

    public static void decryptFile(String encryptedFile, String decryptedFile, String key) throws Exception {
        Key secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);

        try (BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(encryptedFile));
             BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(decryptedFile))) {
            byte[] buffer = new byte[4096];
            int bytesRead;

            while ((bytesRead = inputStream.read(buffer)) != -1) {
                byte[] decryptedBytes = cipher.update(buffer, 0, bytesRead);
                outputStream.write(decryptedBytes);
            }

            byte[] decryptedBytes = cipher.doFinal();
            outputStream.write(decryptedBytes);
        }
    }

    public static void main(String[] args) {
        String encryptedFile = "encrypted.txt";
        String decryptedFile = "decrypted.txt";
        String key = "mySecretKey";

        try {
            decryptFile(encryptedFile, decryptedFile, key);
            System.out.println("File decrypted successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在解密文件的过程中,我们首先生成解密密钥,然后使用Cipher类进行解密操作。与加密操作类似,我们使用BufferedInputStream读取加密文件的内容,并使用BufferedOutputStream将解密后的内容写入到解密文件中。

总结

通过使用Java的加解密算法,我们可以轻松地实现文件的加解密操作。在实际应用中,我们可以根据需要选择合适的加解密算法,并采取一些额外的安全措施,以提高文件的安全性