私は現在、iPhone 用のシンプルなアカウント管理アプリに取り組んでいます。データベースの暗号化と復号化に sqlcipher を使用しています。
現在、アプリケーション バンドルに暗号化されていないデータベースがあり、これを iPhone ドキュメント ディレクトリにコピーしてから暗号化するか、ドキュメント ディレクトリにコピーする前に暗号化する必要があります。
私が直面している問題は、「ATTACH」データベースメソッドであろうと「key()/rekey」であろうと、どのような暗号化方法を使用しようとしても、何をしても暗号化されていないデータベースを取得しているように見えることです()" 方法。
ターミナルで「ATTACH」データベース メソッドを使用しようとしましたが、結果は暗号化されていないデータベースでした。ここに見られるように、プログラムで「key()/rekey()」メソッドを使用してみました:
sqlite3 *db;
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"KeyCrypt.sqlite"];
if (sqlite3_open([defaultDBPath UTF8String],&db)==SQLITE_OK) {
NSLog (@"Running keying.");
sqlite3_key(db, "1234", 4);
if (sqlite3_exec(db, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
// password is correct, or, database has been initialized
NSLog (@"This has occured correctly?");
}
else
{
// incorrect password!
NSLog (@"This has occured incorrectly?");
}
}
私はどこかで何か間違ったことをしていますか?私は丸一日オンラインで調査を試みましたが、実行前または実行中にデータベースが暗号化されない理由の解決策を見つけることができませんでした:(
追加情報が必要な場合は、喜んで提供します。生徒を助けてください。
ありがとう!
編集:
私のデータベースをキーにするために使用される方法の抜粋。
//Initializing the sqlite3_key function.
int sqlite3_key(sqlite3 *db, const void *pKey, int nKey);
sqlite3_key(db, "1234", 4);
どうやら私は sqlite3_key を初期化しなかったようです -_-".また、ファイルが暗号化されているにもかかわらず、チェックはまだ何かが間違って発生し、データベースが正常に開かれなかったと言っています.
データベースを開く場合、データベースを開くたびに、sqlite3_key を正しく実行する必要がありますか? そして、そのインスタンス中に、通常どおりデータベースにアクセスできますか?
助けてくれてありがとう。