我正在构建一个简单的 iphone (SDK6.1) 应用程序,它加密一些用户的笔记,将其存储到数据库中,当用户输入密码(不需要加密)时,它将解密他的笔记并将它们显示给他。
对于我使用核心数据(.xcdatamodel)的数据库。此时的加密文本在数据模型和 Notes.h 文件中被声明为 String,e 它被声明为 NSString。
对于加密,我使用的是来自 CryptoExercise 的苹果示例代码,它运行良好。
问题是,当我尝试将加密文本保存在数据库中然后解密时,我没有得到想要的结果..基本上我得到了一个空字符串。
显然,我正在使用以下代码从 uint8_t 转换为 NSString,因此我可以将其存储到数据模型中,我知道这是我的主要问题。
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];
正如我之前所说,我知道转换 uint8_t 是这里的主要问题,我想知道哪种方法是正确的?
完全可以使用数据模型,还是我应该去 SQLite?