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?
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
Vous devez vous connecter pour publier un commentaire.
Cette ligne vers le haut indique que vous êtes l'ajout d'AES de la fonctionnalité NSMutableData:
En Objective-C, ce qui est appelé une catégorie; les catégories vous permettent d'étendre une classe existante.
Ce code n'est généralement aller dans un fichier nommé NSMutableData-AES.m. Créer un fichier d'en-tête trop, NSMutableData-AES.h. Il doit contenir:
Inclure (#import) cet en-tête dans votre fichier principal. Ajoutez un appel à la fonction de cryptage dans votre code:
De même pour le décryptage.
Vous aurez aussi besoin du code pour CCCrypt dans votre projet, et de l'en-tête de pour que. Une semblable mise en œuvre est ici, tous les fichiers nécessaires zippé pour la facilité: iphonedevelopment.blogspot.com/2009/02/...
OriginalL'auteur Graham Perks
Depuis, cela semble avoir été ignoré jusqu'à présent:
À partir du fichier d'en-tête CommonCrypto/CommonCryptor.h:
Le NULL en gras correspond à la IV. Malheureusement, celui qui a conçu l'API de rendu facultatif. Ce qui rend ce mode CBC essentiellement équivalente à la BCE, qui n'est pas recommandé pour une variété de raisons.
OriginalL'auteur Samuel Neves