Я использовал sqlcipher_export()
, точно так же, как указано here, чтобы зашифровать существующую базу данных Sqlite. Все прошло отлично - никаких ошибок, результирующая база данных не создана и имеет разумный размер. Однако я не могу открыть зашифрованную базу данных, хотя я указываю правильный ключ, используя PRAGMA key
. Незашифрованные базы данных открываются без проблем.Sqlcipher, Windows: шифрование преуспевает, но производит странные результаты
Кроме того, зашифрованная база данных выглядит странно; заголовок, кажется, зашифрован, но не данные. См. http://i.stack.imgur.com/HaBpS.png, это изображение, показывающее двоичное сравнение между зашифрованными (левыми) и незашифрованными (правыми) базами данных.
В отладчике я могу видеть, что во время шифрования, программа проходит через sqlcipher_page_cipher()
, но большую часть времени (каждый раз в течение 2-х вызовов, за исключением) следующее предложение выполняется, а функция возвращает рано:
/* just copy raw data from in to out when key size is 0
* i.e. during a rekey of a plaintext database */
if(c_ctx->key_sz == 0) {
memcpy(out, in, size);
return SQLITE_OK;
}
SQL выдается во время шифрования:
ATTACH DATABASE 'encrypted.db' AS encrypted KEY '12345';
SELECT sqlcipher_export('encrypted');
DETACH DATABASE encrypted;
SQL, выданного во время открытия:
// open database
PRAGMA key = '12345';
// try to read database - "file is encrypted or not a database"
Журналы CODEC_TRACE, сгенерированные во время шифрования и дешифрования, - here.
(В случае, если важно, как я скомпилировал Sqlcipher: я создал слияние Sqlcipher на машине Linux, скопировал полученный C-файл на компьютер Windows, скомпилировал его в Visual C++ Express и связал с предварительно скомпилированной библиотекой OpenSSL.)
След кодека показывает обработку ~ 17000 страниц. encrypted.db существует до начала экспорта? –
Нет, его не существует. (Спасибо за быстрый ответ!) – user38329
Я просто прошел тест с базой данных 138 МБ, точно так же, как задокументирован на сайте sqlcipher на окнах. он работал без проблем, результирующая база данных была зашифрована. Мне интересно, есть ли какая-то проблема с вашей сборкой. Можете ли вы попробовать использовать командную строку и посмотреть, работает ли она? –