2016-12-23 4 views
0

версия FMDB (2.6.2)базы данных дешифрования с использованием FMDB с SQLCipher, SetKey с неправильным паролем всегда возвращает YES

Проблема: Я тестирование FMDB и SQLCipher, и найти хитрую проблему. Я зашифровываю db с паролем test001 успешно, и я экспортирую его и открываю db с помощью DB Brower, с 'test001' Я открываю его без каких-либо проблем. Затем в Xcode я пытаюсь открыть БД с паролем «test002» (я делаю это, чтобы проверить, говорит ли FMDB, что я использую неправильный пароль), однако setkey() возвращает YES. Я проверяю db.lastErrorMessage, он возвращает nil, что означает, что FMDB думает, что я даю правильный ключ. Затем я пытаюсь читать данные из БД с помощью executeQuery(), функция возвращает NO, а NSLog показывает, что файл зашифрован или нет базы данных ".

У кого-то такая же проблема? Это ошибка в sqlite или я использую ее неправильно?

setkey() return YES

executeQuery() return NO due to decrypt error

ответ

0

Вызов setKey(…) не проверяет пароль не является действительным для текущей базы данных, а она просто заставляет базу данных attach a codec context внутри SQLCipher. Следующая команда SQL, которую вы выдаете после ввода базы данных, приведет к возникновению ключа (пока вы не используете шестнадцатеричный шестнадцатеричный ключ) и обычно проверяет, может ли SQLCipher использовать ключ для доступа к вашей базе данных. Обычно мы рекомендуем вам попробовать выполнить следующий запрос для проверки пароля, поскольку таблица sqlite_master всегда будет присутствовать независимо от вашей схемы.

SELECT count(*) FROM sqlite_master; 
+0

спасибо! Ты спасаешь мой день! – mamba

Смежные вопросы