私はこれの上に髪を引っ張ってきました。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サーバーに送信すると、サーバーは「パディングが無効です」と報告します。2つの間にコードの違いはありません!
これら2つのビルドモードのCommonCryptoで何かが違うのではないかと思いますが、それがどうなるかわかりません。そして、AppleのオープンソースサイトからCommonCryptoライブラリを取得してビルドしようとしましたが、それをコードにコンパイルすることを目的としていましたが、正常にビルドできませんでした。
他の誰かがこの問題に遭遇しましたか?ここに欠けているコンパイラオプションはありますか?
* 編集 *
問題の原因となっているフラグを見つけました。「最適化レベル」を「最小/最速」、「最速」、「高速」、または「高速」に設定すると、失敗します。ただし、「なし」に設定すると機能します。したがって、最適化の何かが暗号化を破っています!