我正在使用 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,运行脚本并将输出密码复制并粘贴到 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/ThEyuyUMmKSqU4/fJSzzJOyvsXrGRt5/zsnqjQww=”,我无法在 iOS 上解密它 [失败]
为什么#5 失败了?如果我尝试使用 Xcode 加密“非常非常非常长的文本”,我会得到“kl/ThEyuyUMmKSqU4/fJS90UZoJ73S4gox2uCoWoIL8=" 请注意:kl/ThEyuyUMmKSqU4/fJS == kl/ThEyuyUMmKSqU4/fJS zzJOyvsXrGRt5/zsnqjQww4!= 90UZoZoJ73S
但更进一步,在 Xcode 上加密“早上好”给我“hVq1AuR8PAXSOztK26pmMw==”,而 PHP 给“5UdImsV1pQs60ovXmH74HQ==”,但 Xcode 使用相同的密钥将两者解密为“早上好”。
请帮忙。