Utiliser AES pour chiffrer avec Objective-C et décrypter avec PHP

Je veux utiliser AES pour crypter un mot de passe en Objective-C, puis déchiffrer en PHP, mais j'ai deux problèmes.

  1. Je crypter le mot de passe, mais c'est un NSData objet, j'ai donc coder avec base64, mais quand je décoder en PHP, le résultat est nil. Donc je ne peux pas déchiffrer.
  2. Je peux chiffrer et de déchiffrer le mot de passe en Objective-C, donc c'est le PHP qui est le problème, mais quand j'ai chiffrer avec AES et ensuite encoder en base64, les résultats ne sont pas les mêmes.

Voici mon code:

PHP:

    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $key = "a16byteslongkey!";
    $plaintext = "iphone";
    $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_ECB, $iv);
    $ciphertext = base64_encode($ciphertext);
    echo "ciphertext: ".$ciphertext."<br/>";

    $ciphertext = base64_decode($ciphertext);
    $plaintext = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext, MCRYPT_MODE_ECB, $iv);
    echo "plaintext: ".$plaintext."<br/>";

de sortie:

    ciphertext: SXNepKfh0IrlDDdkq4EdmQ==
    plaintext: iphone

Objective-C: (Obtenir le code source complet ici: https://gist.github.com/838614)

    NSString *key = @"a16byteslongkey!";
    NSString *plaintext = @"iphone";

    NSString *ciphertext = [plaintext AES256EncryptWithKey: key];
    NSLog(@"ciphertext: %@", ciphertext);

    plaintext = [ciphertext AES256DecryptWithKey: key];
    NSLog(@"plaintext: %@", plaintext);

de sortie:

    ciphertext: D19l3gsgXJlrLl7B2oCT6g==
    plaintext: iphone

- je remplacer kCCKeySizeAES256 avec kCCKeySizeAES128, et de remplacer "kCCOptionPKCS7Padding" avec "kCCOptionPKCS7Padding | kCCOptionECBMode",

Dès le départ, on dirait que vous êtes à l'aide de 128 en PHP et 256 en Obj-C... Qui va être un problème.
merci de vous répondre, j'ai remplacer kCCKeySizeAES256 avec kCCKeySizeAES128, et de remplacer "kCCOptionPKCS7Padding" avec "kCCOptionPKCS7Padding & kCCOptionECBMode", mais les résultats ne sont également pas les mêmes. est-il un détail que je devrait changer?
vous semblez être base64_encode-ing, la chaîne résultante en PHP, mais seulement convertir en UTF8 en Obj-C. Évidemment, les résultats seront différents.
peut-être que vous devriez jeter un oeil à NSString+AESCrypt.m, il encoder en base64 "- (NSString *)AES256EncryptWithKey:(NSString *)"

OriginalL'auteur pcrazyc | 2011-08-23