我需要在下载 AES 加密文件时对其进行解密。
这意味着,每次我收到 256 字节的数据,我都可以立即解密。
问题是,用户可能会暂停下载过程,稍后再恢复。 然后,需要创建一个新的 CCCryptorRef 实例来继续解密。但是解密后的数据是错误的。
有什么方法可以完美保存 CCCryptorRef 实例,以便我以后使用它?
顺便说一句,我正在使用 iOS 框架 api。
我正在使用 CCCryptorCreateWithMode()
、CCCryptorUpdate()
、CCCryptorFinal()
进行正常的 AES 处理。
最佳答案
如果您知道使用密码的操作模式,通常您可以创建一个新的密码上下文(或任何名称,例如 Cryptor
)。
例如,对于 CBC 模式,您可以存储刚刚加密的密文的最后一个密码 block (16 字节)。然后您可以将其用作下一个密码上下文的 IV。另一方面,如果您要使用 CTR 模式,那么您需要存储最后一个计数器值并使用该计数器 + 1 开始解密。
这样你就永远不需要存储/恢复密码上下文;这就是为什么 API 中不存在此功能的原因。您可以在所需状态下创建一个新的。
有关操作模式的更多信息 here .
如果您使用 CBC:请注意您会遇到密文片段末尾的去填充问题。您只想在解密最后一个片段时执行 unpadding,当您这样做时,您应该注意 padding oracle 攻击。
如果可用,应首选使用 TLS 来保护传输中的文件内容。
关于ios - AES解密过程可以保存下来以后恢复吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45390539/