Javaでファイルストリームを暗号化する方法は何ですか?

Javaでは、ファイルストリームを暗号化するためにパスワードストリームを使用することができます。パスワードストリームはJava IOライブラリで提供される特別な入出力ストリームであり、基礎となるファイルストリームを暗号化および復号化することができます。以下は、ファイルを暗号化するためにパスワードストリームを使用する方法を示す簡単なコード例です。

import java.io.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;

public class FileEncryption {
    public static void main(String[] args) {
        String sourceFile = "source.txt";
        String encryptedFile = "encrypted.txt";
        String decryptedFile = "decrypted.txt";
        String key = "1234567890abcdef"; // 密钥,16位字符

        try {
            encrypt(sourceFile, encryptedFile, key);
            System.out.println("文件加密成功!");
            
            decrypt(encryptedFile, decryptedFile, key);
            System.out.println("文件解密成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void encrypt(String sourceFile, String encryptedFile, String key) throws Exception {
        File inputFile = new File(sourceFile);
        File outputFile = new File(encryptedFile);

        FileInputStream inputStream = new FileInputStream(inputFile);
        FileOutputStream outputStream = new FileOutputStream(outputFile);

        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);

        CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, cipher);

        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            cipherOutputStream.write(buffer, 0, bytesRead);
        }

        cipherOutputStream.close();
        inputStream.close();
    }

    public static void decrypt(String encryptedFile, String decryptedFile, String key) throws Exception {
        File inputFile = new File(encryptedFile);
        File outputFile = new File(decryptedFile);

        FileInputStream inputStream = new FileInputStream(inputFile);
        FileOutputStream outputStream = new FileOutputStream(outputFile);

        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

        CipherInputStream cipherInputStream = new CipherInputStream(inputStream, cipher);

        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = cipherInputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }

        outputStream.close();
        cipherInputStream.close();
    }
}

上記の例で、ファイルを暗号化および復号するためにAESアルゴリズムが使用されています。AESアルゴリズムは16ビットのキーが必要であるため、コード内では16ビットの文字列がキーとして使用されています。実際のアプリケーションでは、より安全なキー生成方法が必要になる場合があります。

これは単なる例です。 実際のシナリオでは、より多くの例外処理が必要で、より安全な暗号化方法を採用することがあります。

bannerAds