gpt4 book ai didi

ios - iOS中的AES解密: PKCS5 padding and CBC

转载 作者:技术小花猫 更新时间:2023-10-29 11:18:25 24 4
gpt4 key购买 nike

我正在为 iOS 实现一些解密代码,用于对源 self 无法控制的服务器的消息进行解密。另一个平台上的先前实现记录了解密要求 AES256,指定了 key 和初始化向量,还说:

 * 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 等添加到算法 block 大小的长度,在本例中为 16 个字节)。官方 PKCS#5 填充应该只用于 8 字节 block ,但在许多运行时中,两者可以毫无问题地互换。填充总是出现在密文的末尾,所以如果你只是胡言乱语,那不是填充。 ECB 是一种 block 操作模式(不应该用于加密可以与随机数区分开来的数据):它需要填充,因此两者并不相互排斥。

最后,如果你只是执行解密(不是MAC'ing或其他形式的完整性控制),并且你将unpadding的结果返回给服务器(解密失败),你的纯文本数据是不安全的因为padding oracle攻击。

关于ios - iOS中的AES解密: PKCS5 padding and CBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4951507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com