2

我需要能够使用来自不受控制的服务器的 iso10126 填充来解密一大块 AES256 加密数据。CCCrypt 似乎只支持“kCCOptionECBMode”和“kCCOptionPKCS7Padding”作为选项,所以 CommonCrypto 库似乎无法满足我的要求。什么是最好的解决方案?

我也希望能够使用 iso7816 和 iso10126 填充,但它们的优先级较低。我知道这些填充选项被认为“可能不安全”,但由于我无法控制数据源,我希望仍然能够使用这些设置进行解密。

我相当肯定这些 AES 加密的数据片段是由 CryptoJS javascript 库加密的(它具有上面提到的所有填充选项)。我知道我可以通过 UIWebView 使用这个库并将结果返回到 Objective-C,但我想要比 javascript 库所能提供的更快的速度。

谢谢!

4

1 回答 1

3

填充是您实际上可以自己编程的东西之一(与许多其他加密算法不同)。只需在没有任何填充的情况下解密,然后自己进行取消填充以获得纯文本。如果你加密,显然先填充,然后加密。几乎所有的库都支持“NoPadding”之类的东西。您可以通过查看Wikipedia 页面轻松了解所有填充模式的工作原理。

请注意,您始终为给定模式填充/取消填充。因此,您可能必须添加一个完整的填充字节块。

请注意,ISO 7816 填充实际上并不存在。它是 ISO/IEC 9797-1 填充方法 2,用于字节而不是任何位数。它在 ISO/IEC 7816-4 中用于(未定义)安全消息传递(信息性)这一事实并不使其成为该标准的一部分。

无填充的其他问题/答案: iOS 加密 AES128/CBC/nopadding 为什么不起作用? 此链接应向您展示如何使用 iOS API 执行无填充加密/解密。

于 2012-12-27T20:05:18.507 回答