我正在开发 AES 256 位文件加密工具。它现在的工作方式是:
将整个文件读入字符串,加密字符串,删除旧文件,然后将加密的字符串输出到旧文件对象中。
这适用于小文件,但如果您要尝试加密大文件,例如比堆空间 java 也可以访问的大文件,您会收到错误。长话短说,我怎样才能一次读取一 MB 的文件,作为字符串,加密该字符串,然后将该 MB 写入临时文件?这将允许对大文件进行加密。
不需要临时文件。只需使用文件流(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);
}