2011-11-13 11 views
0

iPhoneアプリケーションに格納されているSQLite3データベースの1つのフィールドを暗号化/復号化しようとしています。SQLite3の暗号化/復号化フィールドに問題がある

this questionに記載されているthis categoryを使用しています。それは74657874 20746f20 656e6372 797074形式でフィールドにデータを保存しない

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

:暗号化する一方で

、私は次のコードを使用しています。

復号化中に、空白のフィールドが表示されます(私が知っているすべてを試しました)。私は以下のコードを解読に使用しています:

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

NSDataの説明では、全体のデータ(および長さが異なる)がもう一度読み取られる場合、データ型を正しく変換していないということも正しく表示されます。

NSDataオブジェクトの説明ではなく、バイト自体を保存することで、NSDataオブジェクトを直接保存してみてください。

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

はい。データ型をBLOBに変換してから、バイトとして保存すると役立ちますが、データはランダムに成功して復号化されています。一部の行は空のNULLデータを取得します(何も表示しません)が、再ロード時に取得されます。なぜこれが起こっているのか? – BufferStack

+0

不明..ロギングやデバッガを使用して変数をダンプして各値をチェックしてみてください。また、SQLiteブラウザやコマンドラインを使って、データベースの内容を確認することもできます。 –

+0

私は.. 'NSData * clean = [secretData AES256DecryptWithKey:key];の前に内容がありますが、場合によってはそれ以降にnullとなってしまいます。 答えに感謝します。 – BufferStack