AES cryptage des chaînes en Objective-C

Mon Objectif-C Application nécessite texte /chaîne de chiffrement (spécifiquement nsstring).

Je sais AES est le plus sûr méthode de cryptage disponibles pour utilisation par les consommateurs. Je comprends aussi comment faire pour convertir des chaînes de données et à l'arrière... (juste un débutant).

De nombreuses pages web et Q/Comme sur le chiffrement AES ne sont pas claires, et aucun d'entre eux de l'état comment utiliser le code donné. Par exemple, une page web peut dire: "voici le code... voici ce qu'il fait..." mais pas d'explication sur comment l'utiliser.

J'ai trouvé ce code par le biais de beaucoup de travail de recherche:

#import "<CommonCrypto/CommonCryptor.h>"
@implementation NSMutableData(AES)

Pour le chiffrement:

- (NSMutableData*) EncryptAES:(NSString *)key {
    char keyPtr[kCCKeySizeAES256+1];
    bzero( keyPtr, sizeof(keyPtr) );

    [key getCString: keyPtr maxLength: sizeof(keyPtr) encoding: NSUTF16StringEncoding];
    size_t numBytesEncrypted = 0;

    NSUInteger dataLength = [self length];

    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);

    NSMutableData *output = [[NSData alloc] init];

    CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL, [self mutableBytes], [self length], buffer, bufferSize, &numBytesEncrypted);

    output = [NSMutableData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

    if(result == kCCSuccess) {
        return output;
    }
        return NULL;
    }

Pour Le Décryptage:

- (NSMutableData*)DecryptAES: (NSString*)key andForData:(NSMutableData*)objEncryptedData {

    char  keyPtr[kCCKeySizeAES256+1];
    bzero( keyPtr, sizeof(keyPtr) );

    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF16StringEncoding];

    size_t numBytesEncrypted = 0;

    NSUInteger dataLength = [self length];

    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer_decrypt = malloc(bufferSize);    
    NSMutableData *output_decrypt = [[NSData alloc] init];
    CCCryptorStatus result = CCCrypt(kCCDecrypt , kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL, [self mutableBytes], [self length], buffer_decrypt, bufferSize, &numBytesEncrypted);

    output_decrypt = [NSMutableData dataWithBytesNoCopy:buffer_decrypt length:numBytesEncrypted];

    if(result == kCCSuccess) {
        return output_decrypt;
    } 
        return NULL;
    }
}

C'est le code que j'ai fait et que j'aimerais correspondre avec le code ci-dessus:

- (void)Encrypt {
    //Convert NSString to NSData so that it can be used to encrypt the Input
    NSString *Input  = [Inputbox text];
    NSData *InputData = [Input dataUsingEncoding:NSUTF8StringEncoding];
    //What to do here
}

Comment puis-je utiliser ce code, ces méthodes? Où faut-il aller dans mon fichier de Mise en oeuvre?

Salut @RazorSharp - avez migré votre question ici (Débordement de Pile). Des Questions sur l'obtention du code de travail de toute sorte, de chiffrement ou autres, sont la meilleure réponse ici, car il y a une grande piscine de gens ici qui peut vous aider, mais si vous voulez poser des questions sur le détails de toutes les algorithmes, les rembourrages, etc utilisé, puis la crypto est la place pour elle!
Une importante étude de conception à garder à l'esprit est que l'algorithme de chiffrement n'est qu'une partie de la solution. La gestion des clés est très importante, et peut facilement être le point le plus faible dans un système. Il y a quelques bons livres sur ce genre de chose (par exemple. Schneier), et beaucoup d'articles sur le design. Certaines recherches peuvent maintenant économiser beaucoup de travail plus tard.
Utiliser les github.com/Gurpartap/AESCrypt-ObjC pour rapide AES-256-CBC de chiffrement et de l'encodage Base64 en fonction de chiffrement/déchiffrement. Vous pouvez utiliser le même algorithme de chiffrement et de codage pour une utilisation hors de l'appareil de traitement (serveur, etc).
éventuellement manquantes free(buffer) / gratuit(buffer_decrypt) quand la suite!!! = kCCSuccess?

OriginalL'auteur Samuel Spencer | 2011-09-02