我想使用带有C的OpenSSL使用aes256加密文件。 我找到了一个非常好的例子here。
我应该首先将整个文件读入内存缓冲区而不是aes256,还是应该使用~16K缓冲区进行部分读取?
任何片段或提示?
答案 0 :(得分:7)
在较大的文件中加载整个文件在缓冲区中可能效率低下 - 仅当所有文件都低于某个大小限制时才这样做。
OpenSSL的EVP API(也由the example you linked使用)具有EVP_EncryptUpdate
函数,可以多次调用,每次提供更多字节进行加密。在循环中使用它,同时将明文从文件读入缓冲区,并将密文写入另一个文件(或同一个文件)。 (类似于解密。)
当然,不要发明一种新的文件格式(你在这里有效地做),而是考虑实现OpenPGP消息格式(RFC 4880)。犯错的可能性较小,可能会破坏您的安全性 - 作为额外的奖励,如果您的程序停止运行,您的用户可以随时使用标准工具(PGP或GnuPG)来解密文件。
答案 1 :(得分:5)
最好重复使用固定缓冲区,除非您知道总是处理小文件 - 但我认为这不符合备份文件定义。< / p>
我以非加密的方式说更好 :-)最后(对于加密文件)没有任何差异,但您的计算机可能不喜欢(甚至不能)将几MB(或GB)加载到内存中。
Crypto-wise操作在块中完成,对于 AES ,它是128位(16字节)。因此,为简单起见,最好为缓冲区使用16个字节的倍数。否则选择权归你的。 我建议使用4kb到16kb的缓冲区,但说实话,我会测试几个值。