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