Ios AES解密过程能否保存并在以后恢复?

Ios AES解密过程能否保存并在以后恢复?,ios,encryption,aes,commoncrypto,Ios,Encryption,Aes,Commoncrypto,我需要在下载AES加密文件时对其进行解密 这意味着,每次我收到256字节的数据,我就可以立即解密它 问题是,用户可能会暂停下载过程,稍后再恢复。 然后,需要创建一个新的CCCryptorRef实例以继续解密。但是解密的数据是错误的 是否有任何方法可以完美地保存CCCryptorRef实例,以便稍后使用 顺便说一句,我使用的是iOS框架API。 我正在使用CCCryptorCreateWithMode(),CCCryptorUpdate(),CCCryptorFinal()用于正常的AES进程。如

我需要在下载AES加密文件时对其进行解密

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

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

是否有任何方法可以完美地保存CCCryptorRef实例,以便稍后使用

顺便说一句,我使用的是iOS框架API。
我正在使用
CCCryptorCreateWithMode()
CCCryptorUpdate()
CCCryptorFinal()
用于正常的AES进程。

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

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

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


有关操作模式的更多信息


在使用CBC的情况下:请注意,在密文片段的末尾添加未添加的内容会给您带来麻烦。您只希望在解密最后一个片段时执行unpadding,并且在执行此操作时,应该注意填充oracle攻击



如果可以,最好使用TLS保护传输中的文件内容。

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

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

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


有关操作模式的更多信息


在使用CBC的情况下:请注意,在密文片段的末尾添加未添加的内容会给您带来麻烦。您只希望在解密最后一个片段时执行unpadding,并且在执行此操作时,应该注意填充oracle攻击



如果可以,最好使用TLS保护传输中的文件内容。

您真的应该使用TLS/HTTPS。您真的应该使用TLS/HTTPS。这正是我想要的,谢谢!我正在使用AES(CBC)加密/解密文件。由于这些文件的大小通常在100kb到500mb之间,您认为合理的块大小是多少?AES的块大小固定为16字节(128位)。一次下载的数据量大小的选择取决于您,但它当然需要是16的倍数(您可以称之为“文件片段大小”,以区别于AES块大小)。别忘了给IV加前缀,CBC确实需要一个随机IV。使用CBC时,你应该加倍小心,不要实现填充oracle。这正是我想要的,谢谢!我正在使用AES(CBC)加密/解密文件。由于这些文件的大小通常在100kb到500mb之间,您认为合理的块大小是多少?AES的块大小固定为16字节(128位)。一次下载的数据量大小的选择取决于您,但它当然需要是16的倍数(您可以称之为“文件片段大小”,以区别于AES块大小)。别忘了给IV加前缀,CBC确实需要一个随机IV。使用CBC时,你应该加倍小心,不要实现填充oracle。