c-如何正确加密文件AES-CBC



使用AES_cbc_encrypt加密文件时。

我是否需要循环文件中的每个AES_BLOCK_SIZE,并将其加密到缓冲区中,然后将其写入新文件?类似的东西:

while (fread(buffer, 1, AES_BLOCK_SIZE, file) == AES_BLOCK_SIZE) {
    AES_cbc_encrypt(buffer, outputBuffer, AES_BLOCK_SIZE, &aeskeyEnc, iv_dec, AES_ENCRYPT);
}

或者,我可以更好地读取一个块,在不创建新文件的情况下在该文件上对其进行加密,然后迭代到下一个块。

当然可以。在CBC的情况下,如果您计划重复使用密钥,您可能需要将IV存储在某个地方。如果遇到紧急情况,您可以将IV存储在文件的末尾,而不是前面。您还可以对文件进行内存映射,并对生成的映射执行加密。

您需要将最后一个密文保留为IV,以便进行下一个密文加密。一次加密更多的块可能会给您带来性能优势——如果逐块加密,通常会对I/O和IV的设置造成性能损失。

如果您使用CTR模式加密,您甚至可以并行加密并跳转到文件中的特定偏移。请注意,I/O可能是瓶颈;在这种情况下,并行化加密可能不会带来太多好处。

最新更新