我一直把头发拉过来。我在我的iOS应用程序中使用CommonCrypto来加密数据,然后将数据发送到解密它的Windows服务器。这在我的iPhone 5(iOS 6),iPad 3(iOS 6)和模拟器(Mac OS X 10.8.2)上的Xcode(最新版本)开发环境中完美运行。
我用来加密的非常简单的代码是:
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES128, // oorspronkelijk 256
keyPtr /* initialization vector (optional) */,
[self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesEncrypted);
同样,当我从Xcode调试时,这很有用。
但是,当我构建IPA(存档文件,即Apple为App Store评论的内容)并将加密数据发送到Windows服务器时,服务器会报告“填充无效”。两者之间没有代码差异!
我怀疑CommonCrypto在这两种构建模式中有所不同,但我无法弄清楚它会是什么。我尝试从Apple的开源网站获取CommonCrypto库并构建它,目的是将其编译到我的代码中,但我无法成功构建它。
还有其他人遇到过这个问题吗?我在这里缺少一些编译器选项吗?
*编辑*
我找到导致问题的标志:如果我将“优化级别”设置为“最小/最快”,“最快”,“更快”或“快速” - 它会失败。但如果我把它设置为“无”,它就可以了。因此,优化中的某些因素导致加密中断!