在SQLite3中加密/解密字段时遇到问题

时间:2011-11-13 16:13:53

标签: ios encryption sqlite aes

我正在尝试加密/解密存储在iPhone应用程序中的SQLite3数据库的一个字段。

我正在使用this category中提到的this question

加密时,我使用以下代码:

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 个答案:

答案 0 :(得分:1)

NSData的描述返回类似“”=>的内容。如果你再次阅读它会得到不同的整体数据(并且长度更长),你也没有正确地转换数据类型。

尝试直接保存NSData对象,方法是保存字节本身而不是NSData对象的描述。

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