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