0

私は AES 256 ビット ファイル暗号化ツールに取り組んでいます。現在の動作方法は次のとおりです。

ファイル全体を文字列に読み取り、文字列を暗号化し、古いファイルを削除してから、暗号化された文字列を古い File オブジェクトに出力します。

これは小さなファイルに対しては機能しますが、Java がアクセスできるヒープ スペースよりも大きなファイルなど、大きなファイルを暗号化しようとすると、エラーが発生します。簡単に言うと、ファイルを一度に 1 MB ずつ文字列として読み取り、その文字列を暗号化し、その MB を一時ファイルに書き込むにはどうすればよいですか? これにより、大きなファイルを暗号化できます。

4

1 に答える 1

3

一時ファイルは必要ありません。ファイル ストリーム (FileInputStream および FileOutputStream) を使用するだけです。ストリーミング I/O は、長いファイルをチャンクで処理するために正確に作成されました。文字列を読み書きしたい場合は、FileReader/Writer を使用できます。例があります

  public void decrypt(File in, File out) throws IOException, InvalidKeyException {
    aesCipher.init(Cipher.DECRYPT_MODE, aeskeySpec);
    CipherInputStream is = new CipherInputStream(new FileInputStream(in), aesCipher);
    FileOutputStream os = new FileOutputStream(out);

    int i;
    byte[] b = new byte[1024];
    while((i=is.read(b))!=-1) {
            os.write(b, 0, i);
    }
于 2012-12-24T14:43:55.880 に答える