Возникла проблема в поле шифрования / дешифрования в SQLite3 - PullRequest
0 голосов
/ 13 ноября 2011

Я пытаюсь зашифровать / расшифровать одно поле базы данных SQLite3, хранящейся в приложении iPhone.

Я использую эту категорию , упомянутую в этот вопрос .

При шифровании я использую следующий код:

NSString *key = @"pass123";
NSString *secret = webNote.note;

NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding];
NSData *cipher = [plain AES256EncryptWithKey:key];

sqlite3_bind_text(statement, 1, [[cipher description] UTF8String], -1, SQLITE_TRANSIENT);    

Сохраняет данные в поле в формате 74657874 20746f20 656e6372 797074.

Но при расшифровке я получаю пустое поле (перепробовал все что знал).Я использую следующий код для расшифровки:

char *noteDet = (char *)sqlite3_column_text(statement, 1);

NSString *key = @"pass123";
NSString *secret = [NSString stringWithUTF8String:noteDet];

NSData *secretData = [secret dataUsingEncoding:NSUTF8StringEncoding];

NSData *clean = [secretData AES256DecryptWithKey:key];
aNote.note = ([[NSString alloc] initWithData:clean encoding:NSUTF8StringEncoding])?[[NSString alloc] initWithData:clean encoding:NSUTF8StringEncoding]:@"";

Я думаю, я не могу конвертировать типы.Пожалуйста, руководство!

Спасибо!

1 Ответ

1 голос
/ 13 ноября 2011

Описание NSData возвращает что-то вроде "" =>, если вы прочитаете это снова, вы получите другие общие данные (и большей длины), также вы правы в том, что вы не конвертируете типы данных правильно.

Попробуйте сохранить объект NSData напрямую, сохранив сами байты, а не описание объекта NSData.

void *bytes = [dataObject bytes];
size_t length = [dataObject length];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...