سؤال

لقد كنت أحاول تشفير/ فك تشفير قاعدة بيانات SQLite في مشروع iPhone الخاص بي. أنا قادر على تشفير قاعدة البيانات باستخدام طريقة 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);

}

لقد قرأت المنشورات حول هذا الموضوع في مجموعات Google SQLCipher ، لكنني غير قادر على فك تشفيره. أي مساعدة سيكون موضع تقدير كبير.

هل كانت مفيدة؟

المحلول

إعادة التوصل إلى القائمة البريدية:

إذا كنت تحاول أخذ قاعدة بيانات حالية غير مشفرة ، وتشفيرها ، ثم فك تشفيرها مرة أخرى ، فإن النهج الموصى به هو عدم استخدام REKEY ، ولكن بدلاً من ذلك لاستخدام قواعد البيانات المرفقة لنسخ البيانات بين معيار وقاعدة بيانات SQLCIPHER. هناك المزيد من المعلومات ومثال ملموس هنا:

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

إذا كنت بدلاً من ذلك ، فأنت تحاول فقط استخدام SQLCipher لتشفير البيانات بشكل عام (أي مع عدم وجود تحويل من قاعدة بيانات موجودة مسبقًا) ، فأنت بحاجة فقط إلى استخدام SQLite3_Key. يمكنك فقط فتح قاعدة البيانات ، وتوفير المفتاح ثم إجراء مكالمات SQL. لا توجد خطوات منفصلة للتشفير / فك التشفير - كل ذلك يتم التعامل معه أثناء الطيران بواسطة رمز SQLCipher. في الرمز الذي نشرته سابقًا ، لن تتصل أبدًا بـ Rekey على الإطلاق. في كل مرة تقوم فيها بفتح قاعدة البيانات التي تسميها مفتاح Pragma ، ثم قم بتشغيل فحص سريع للتأكد من أن SQLite_Master قابلة للقراءة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top