我正在尝试加密/解密存储在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]:@"";
我想,我无法转换类型。请指导!
谢谢!
答案 0 :(得分:1)
NSData的描述返回类似“”=>的内容。如果你再次阅读它会得到不同的整体数据(并且长度更长),你也没有正确地转换数据类型。
尝试直接保存NSData对象,方法是保存字节本身而不是NSData对象的描述。
void *bytes = [dataObject bytes];
size_t length = [dataObject length];