Jim Dovey による NSData+AESCrypt カテゴリと、Michael Sedlaczek (2011-02-22) による NSString+AESCrypt を使用しています。
そしてPHPには簡単なスクリプトがあります:
<?php
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key = '01234567890123456789012345678901';
$plaintext = "myworda";
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_ECB);
$base64encoded_ciphertext = base64_encode($ciphertext);
echo "ciphertext: ".$base64encoded_ciphertext."<br/>";
?>
ObjC で:
NSString *key = @"01234567890123456789012345678901";
NSString *plaintext = [@"+l56Ia4yyK19D2x2+oCXuw==" AES256DecryptWithKey: key];
NSLog(@"plaintext: %@", plaintext);
PHP で変数 $plaintext を変更し、スクリプトを実行し、output-cipher をコピーして Objective-c に貼り付けて復号化します。
と:
「myword」は「+l56Ia4yyK19D2x2+oCXuw==」を提供し、iOS で復号化して「myword」を取得します [OK]
「おはよう」で「5UdImsV1pQs60ovXmH74HQ==」が返され、iOS で復号化して「おはよう」を取得 [OK]
- "Schröder" は "KqNSCE8nGsYUYVdGZ2tnMw==" を返し、iOS で復号化して "Schröder" を取得します [OK]
- "Schröder" は "KqNSCE8nGsYUYVdGZ2tnMw==" を返し、iOS で復号化して "Schröder" を取得します [OK]
- 「非常に長いテキスト」で「lsa+QF3IHQnAFiOjl2Heyg==」が返され、iOS で復号化して「非常に長いテキスト」を取得する [OK]
- 「非常に非常に長いテキスト」で「kl/TheEyuyUMmKSqU4/fJSzzJOyvsXrGRt5/zsnqjQww=」が表示され、iOS で復号化できません [FAIL]
なぜ#5は失敗するのですか?Xcode を使用して「非常に非常に長いテキスト」を暗号化しようとすると、「kl/TheEyuyUMmKSqU4/fJS90UZoJ73S4gox2uCoWoIL8=」というメッセージが表示されます。
さらに、Xcode で「おはよう」を暗号化すると、「hVq1AuR8PAXSOztK26pmMw==」が返され、PHP は「5UdImsV1pQs60ovXmH74HQ==」が返されますが、Xcode は同じキーを使用して両方を「おはよう」に復号化します。
助けてください。