Je construis une application iphone simple (SDK6.1) qui crypte des notes de certains utilisateurs, les stocke dans une base de données et quand l'utilisateur saisit un mot de passe (il n'a pas besoin d'être crypté) notes et montrez-lui.Enregistrement d'un texte chiffré uint8_t dans DataModel
Pour la base de données j'utilise Core Data (.xcdatamodel). Le texte crypté pour le moment est déclaré comme chaîne dans le modèle de données et dans le fichier Notes.h, il est déclaré NSString.
Pour le cryptage, j'utilise l'exemple de code Apple de CryptoExercise qui fonctionne parfaitement. Le problème est que lorsque j'essaie d'enregistrer le texte crypté dans la base de données et de le déchiffrer, je n'obtiens pas les résultats escomptés. En gros, je récupère une chaîne vide.
Évidemment j'utilise le code suivant pour convertir uint8_t en NSString afin que je puisse le stocker dans le modèle de données et je comprends que c'est mon problème principal.
uint8_t *cipherBuffer = NULL;
SecKey *encrypt = [[SecKey alloc]init];
NSString *et = [[NSString alloc]init];
[encrypt generateKeyPairRSA];
// Encrypt the plain text
cipherBuffer = [encrypt Encryption:plainTextField.text];
// Convert uint8_t to NSString
NSMutableData *data = [[NSMutableData alloc]init];
[data appendBytes:cipherBuffer length:strlen((char*)cipherBuffer)+1];
NSString *string = [[NSString alloc]initWithData:data encoding: NSASCIIStringEncoding];
// Save to Data Model
[self.currentNote setEncryptedText:string];
[self.delegate addNewNoteViewControllerDidSave];
// Retrieve encrypted text from database
et = [self.currentNote encryptedText];
// Convert back to uint_8
NSData *someData = [et dataUsingEncoding:NSUTF8StringEncoding];
const void *bytes = [someData bytes];
uint8_t *crypto_data = (uint8_t*)bytes;
// Decrypt Data
[encrypt Decryption:crypto_data];
Comme je l'ai dit avant que je comprends que la conversion uint8_t est ici et je voudrais savoir le principal problème qui est la bonne façon de le faire?
Est-il possible avec le modèle de données du tout, ou devrais-je aller à SQLite ??
Merci beaucoup, je savais que les conversions étaient fausses mais depuis que je suis nouveau sur iphone je ne pouvais pas savoir les moyens de le réparer. J'ai résolu le problème en utilisant les deux façons, mais je suppose que le premier (stocker en tant que données binaires) est le plus approprié pour cette situation .. –
@GeorgeNikolaides: Oui, stocker des données binaires est le meilleur moyen, c'est pourquoi je l'ai mis en premier sur la liste des solutions possibles. –