AES解密过程可以保存下来以后恢复吗?

Can AES decryption process be saved and restore later?

我下载一个AES加密的文件需要解密

也就是说,每次收到256字节的数据,我都可以马上解密。

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

有什么方法可以完美保存 CCCryptorRef 实例,以便我以后使用它吗?

顺便说一句,我正在使用 iOS 框架 api。 我正在使用 CCCryptorCreateWithMode()CCCryptorUpdate()CCCryptorFinal() 进行正常的 AES 处理。

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

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

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


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


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


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