【发布时间】:2012-12-24 14:27:23
【问题描述】:
我正在开发 AES 256 位文件加密工具。它现在的工作方式是:
将整个文件读入字符串, 加密字符串, 删除旧文件,然后将加密后的 String 输出到旧的 File 对象中。
这适用于小文件,但如果您要尝试加密大文件,例如比堆空间 Java 也可以访问的大文件,您会收到错误消息。长话短说,我怎样才能一次读取一 MB 的文件,作为字符串,加密该字符串,然后将该 MB 写入临时文件?这将允许对大文件进行加密。
【问题讨论】:
-
这从根本上来说很棘手。 CBC 使这成为不可能,而 ECB 并不安全。 en.wikipedia.org/wiki/Disk_encryption_theory
-
最好将加密后的结果写入一个新建文件,如果新文件创建成功则删除原文件并将新文件重命名为原文件。这样,如果写入新文件失败,您可以保证不会丢失原始文件。
-
这是一个更好的主意,我不这样做。但主要问题是如何将文件读入部分字符串
-
@DonutAvenger:您可以映射它,而不是将文件读入内存。不过,这意味着使用 nio。