出典: http://www.henishuo.com/ios-aes128-ecb-nopadding/
話しましょうインターネット上にはさまざまなバージョンの AES 暗号化があり、暗号化のセキュリティの問題についてあまり考えていなかったときは、Baidu がリリースした特定の AES 暗号化アルゴリズムを直接使用できるのではないかと考えていました。多くの落とし穴に遭遇しましたが、それは単に持ち込んで使用するだけではないことがわかりました。この記事を書いて、あなたが遭遇した落とし穴を記録し、今後同じ落とし穴が再び起こらないようにしてください。
元の入力データが 16 バイトの整数に足りない場合は、埋める必要があります。したがって、異なるパディングが使用されると、暗号化の結果も異なります。
Apple が提供する API には、暗号化または復号化のための次の機能のみがあります:
CCCryptorStatus CCCrypt( CCOperation op, /* kCCEncrypt, etc. */ CCAlgorithm alg, /* kCCAlgorithmAES128, etc. */ CCOptions options, /* kCCOptionPKCS7Padding, etc. */ const void *key, size_tkeyLength, const void *iv, /* optional initialization vector */ const void *dataIn, /* optional per op and alg */ size_tdataInLength, void *dataOut, /* data RETURNED here */ size_tdataOutAvailable, size_t*dataOutMoved) __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0);
enum { kCCAlgorithmAES128 = 0, kCCAlgorithmAES = 0, kCCAlgorithmDES, kCCAlgorithm3DES, kCCAlgorithmCAST, kCCAlgorithmRC4, kCCAlgorithmRC2, kCCAlgorithmBlowfish };typedef uint32_tCCAlgorithm;
ここで使用するのは kCCAlgorithmAES128 で、これは AES128 を使用することを意味します。ビット暗号化。
enum { /* options for block ciphers */ kCCOptionPKCS7Padding = 0x0001, kCCOptionECBMode = 0x0002 /* stream ciphers currently have no options */};typedef uint32_tCCOptions;