我正在構建一個簡單的iPhone(SDK6.1)應用程序,用於加密某些用戶的筆記,將其存儲到數據庫中,並且當用戶輸入密碼(不需要加密)時,它將解密他的記錄並展示給他。將uint8_t密文保存到DataModel中
對於我正在使用的數據庫Core Data(.xcdatamodel)。當前的加密文本在數據模型中聲明爲String,並在Notes.h中聲明爲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?
非常感謝,我知道轉換是錯誤的,但由於我是iphone新手,我不知道修復它的方法。我用兩種方法解決了這個問題,但我想第一個(存儲爲二進制數據)是最適合這種情況的.. – 2013-04-11 10:43:36
@GeorgeNikolaides:是的,存儲爲二進制數據是更好的方式,這就是爲什麼我先將它放在可能的解決方案列表中。 – 2013-04-11 11:09:16