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

时间:2015-10-30 00:30:35

标签: c encryption aes

使用AES_cbc_encrypt加密文件时。

我是否需要while循环文件中的每个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);
}

或者甚至可以更好地读取一个块,在该文件上就地加密它而不创建新文件并迭代到下一个块。

1 个答案:

答案 0 :(得分:0)

当然可以。如果您计划重新使用密钥,在CBC的情况下,您可能希望将IV存储在某处。如果推动推动,您可以将IV存储在文件的末尾而不是前面。您还可以在内存中映射文件并在生成的地图上执行加密。

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

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