0

我正在开发 AES 256 位文件加密工具。它现在的工作方式是:

将整个文件读入字符串,加密字符串,删除旧文件,然后将加密的字符串输出到旧文件对象中。

这适用于小文件,但如果您要尝试加密大文件,例如比堆空间 java 也可以访问的大文件,您会收到错误。长话短说,我怎样才能一次读取一 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 回答