是否可以保存AES解密过程并在以后恢复?

时间:2017-07-29 14:43:08

标签: ios encryption aes commoncrypto

我需要在下载时解密AES加密文件。

这意味着,每次收到256字节的数据时,我都可以立即解密。

问题是,用户可能暂停下载过程,并在以后恢复。 然后,需要创建一个新的CCCryptorRef实例以继续解密。但是解密的数据是错误的。

有没有办法完美保存CCCryptorRef实例,以便以后可以使用?

不过,我正在使用iOS框架apis。 我正在使用CCCryptorCreateWithMode()CCCryptorUpdate()CCCryptorFinal()进行常规AES处理。

1 个答案:

答案 0 :(得分:2)

通常,如果您知道使用密码的操作模式,则可以创建新的密码上下文(或任何名称,例如Cryptor)。

例如,对于CBC模式,您可以存储刚刚加密的密文的最后一个密码块(16个字节)。然后,您可以将其用作下一个密码上下文的IV。另一方面,如果您使用CTR模式,则需要存储最后一个计数器值并开始使用该计数器+ 1进行解密。

这样您就不需要存储/恢复密码上下文;这就是为什么API中不存在此功能的原因。您可以在所需状态下创建一个新的。

有关操作模式的更多信息here

如果您使用CBC:请注意在密文片段末尾的unpadding遇到麻烦。你只想在解密最后一个片段时执行unpadding,当你这样做时,你应该知道填充oracle攻击。

如果可用,则应首选使用TLS保护传输中的文件内容。