BufferStack
BufferStack

Reputation: 549

Having an issue in encrypting/decrypting field in SQLite3

I am trying to encrypt/decrypt one field of SQLite3 database stored in iPhone app.

I am using this category mentioned in this question.

While encrypting, I am using following code:

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);    

It does save data into the field in 74657874 20746f20 656e6372 797074 format.

But while decrypting, I get blank field (tried everything I knew). I am using following code for decrypting:

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]:@"";

I think, I am unable to convert types. Please guide!

Thanks!

Upvotes: 0

Views: 443

Answers (1)

Antwan van Houdt
Antwan van Houdt

Reputation: 6991

The description of NSData returns something like "" => if you were to read that again you would get different overall data ( and of a higher length ), also you are right that you are not converting the data types correctly.

Try saving the NSData object directly, by saving the bytes themselves rather than the description of the NSData object.

void *bytes = [dataObject bytes];
size_t length = [dataObject length];

Upvotes: 1

Related Questions