0

iPhone プロジェクトで sqlite データベースを暗号化/復号化しようとしています。reKey メソッドを使用してデータベースを暗号化できます。しかし、私はそれを解読することができません。sqlite.db ファイルをフォルダーに保存しました。現在、シミュレーターで試しています。

コードスニペット:

[[SQLiteDB sharedSQLiteDB] open:<path to the folder> withKey:@""];

[[SQLiteDB sharedSQLiteDB] reKey:@"abc"];

[[SQLiteDB sharedSQLiteDB] close];

[[SQLiteDB sharedSQLiteDB] open:<path to the folder> withKey:@"abc"];

[[SQLiteDB sharedSQLiteDB] reKey:@""];

.....

- (BOOL)open:(NSString *)path withKey:(NSString *)masterKey {

    if (sqlite3_open([path fileSystemRepresentation], &_db) != SQLITE_OK) {
        NSLog(@"SQLite Opening Error: %s", sqlite3_errmsg(_db));
        return NO;
    }

    if(masterKey)
        sqlite3_exec(_db, [[NSString stringWithFormat:@"PRAGMA key = '%@'", masterKey] UTF8String], NULL, NULL, NULL);

    if (sqlite3_exec(_db, (const char*) "SELECT count(*) FROM sqlite_master", NULL, NULL, NULL) != SQLITE_OK)
    {
        [self close];
        NSLog(@"SQLite Key Error!");
        return NO;
    }

    filePath = [path retain];
    return YES;
}

……

- (void)reKey:(NSString *)masterKey
{
    sqlite3_exec(_db, [[NSString stringWithFormat:@"PRAGMA rekey = '%@'", masterKey] UTF8String], NULL, NULL, NULL);

}

このトピックに関する sqlcipher google グループの投稿を読みましたが、解読できません。どんな助けでも大歓迎です。

4

1 に答える 1

2

メーリングリストからのリポーズ:

既存の暗号化されていないデータベースを取得し、暗号化してから復号化する場合は、キーの再生成を使用せず、代わりにATTACHされたデータベースを使用して標準データベースとsqlcipherデータベース間でデータをコピーすることをお勧めします。ここには、より多くの情報と具体的な例があります。

http://www.zetetic.net/blog/2009/12/29/how-to-encrypt-a-plaintext-sqlite-database-to-use-sqlcipher/

If instead, you are just trying to use sqlcipher to encrypt data in general (i.e. with no conversion from a pre-existing database), then you just need to use sqlite3_key. You basically just open the database, provide the key and then make sql calls. There are no separate encryption / decryption steps - all of that is handled on the fly by the sqlcipher code. In the code you posted previously, you'd never call rekey at all. Each time you open the database you call PRAGMA key, and then run a quick check to ensure that sqlite_master is readable.

于 2010-09-13T03:34:19.100 に答える