iOS中的AES解密:PKCS5填充和CBC

我正在为iOS实现一些解密代码,用于源自我无法控制的服务器上的消息.另一个平台上的先前实现记录了解密要求AES256,指定了密钥和初始化向量,并且还说:
* Cipher Mode: CBC
 * Padding: PKCS5Padding

创建CCCryptor对象的选项仅包括kCCOptionPKCS7Padding和kCCOptionECBMode,注意CBC是默认值.根据我对填充加密的理解,我不明白如何使用这两者;我以为它们是相互排斥的.在创建用于解密的CCCryptor时,我尝试使用0作为选项和kCCOptionPKCS7Padding,但是在解密之后都给了我乱码.

我已经将这个解密的转储与另一个平台上解码的字节缓冲区的转储进行了比较,并确认它们确实是不同的.所以我在这个实现中有一些不同的东西,这是显着不同的,我只是不知道是什么……并且没有关于如何处理它的线索.平台的不同之处在于很难从之前的实现中推断出很多,因为它基于一个非常不同的平台.当然,之前实施的作者已经离开了.

任何猜测还有什么可能是不兼容的或如何解决这个问题?

解决方法

PKCS#5 padding and PKCS#7 padding are practically the same(将字节01,或0202或0303等添加到算法的块大小的长度,在这种情况下为16字节).正式的PKCS#5填充应仅用于8字节块,但在许多运行时,两者可以互换而不会出现问题.填充总是出现在密文的末尾,所以如果你只是乱码,那就不是填充. ECB是一种块操作模式(不应该用于加密可以与随机数区分开的数据):它需要填充,因此两者不是互斥的.

最后,如果您只是执行解密(不是MAC或其他形式的完整性控制),并且将unpadding的结果返回给服务器(解密失败),则由于填充oracle攻击,您的纯文本数据不安全.

以上是来客网为你收集整理的iOS中的AES解密:PKCS5填充和CBC全部内容,希望文章能够帮你解决iOS中的AES解密:PKCS5填充和CBC所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。