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

标签 ios encryption aes commoncrypto

我需要在下载 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/

相关文章:

ios - 有没有办法配置您的应用程序所需的 ios 版本?

ios - React Native 使用设备上的预捆绑文件,即使是 DEV 模式

android - 关于 Google Play 应用 Assets 加密的问题

java - Java中使用AES算法进行图像加密

ios - 错误的多部分 - 在服务器上发布(json + 图像)

ios - 如何在 swift 4 中设置对 collectionView 的关注?

javascript - javascript和python的公钥解决方案

postgresql - 如何加密postgresql中的列?

java - 生成给定长度的 AES key ,其中包含 a-Z0-9

java - Java中加密后的HMAC解决方案