Шифровать / расшифровывать SQLite-базу данных и использовать ее "на лету"

вот в чем дело: В моем Qt4.6-проект, я использую SQLite-базу данных. Эта база данных не должна быть незашифрована на моем жестком диске. Поэтому я хочу, чтобы при каждом запуске моей программы пользователю предлагалось ввести пароль для расшифровки базы данных. Конечно, база данных никогда не должна отображаться "в clear" (не зашифрована) на моем жестком диске.
Итак, есть ли возможность расшифровать SQLite-базу данных "на лету" и читать и записывать данные? Какой алгоритм здесь лучший (может быть, AES)?
Когда он невозможно (или очень медленно), может быть, лучше зашифровать каждую строку в базе данных и расшифровать строку, когда пароль был правильным (чтобы пользователь мог открыть базу данных, но не имеет понятия, что все входы могут означать)?

4 ответов


нет встроенной поддержки, что, как говорится, у вас есть варианты.

1) Вы можете зашифровать/расшифровать все свои строки самостоятельно, но это большая работа, не прозрачна и не позволит вам делать такие вещи, как поиск в базе данных.

2) SQLiteCrypt и SQLCipher делать то, что вы ищете.

вы можете использовать их почти полностью прозрачными, и обычно они, как говорят, имеют только около 5% накладных расходов сравнивается без шифрования.


Я бы предложил использовать библиотеку, которая делает это для вас, а не создавать собственное шифрование.

http://www.hwaci.com/sw/sqlite/see.html или http://sqlite-crypt.com/documentation.htm

используйте свою любимую поисковую систему для некоторых альтернатив.


лучший способ, о котором я могу думать, - это использовать взрыватель - "файловые системы в user-land" -доступны для Linux , Mac OS X и других систем или другой зашифрованной файловой системы. Это заставит SQLite видеть его незашифрованным, будучи физически зашифрованным на диске. Играя с разрешениями, вы можете убедиться, что люди не могут получить доступ к незашифрованной файловой системе.

Я не уверен, что SQLite имеет способ переехать низкоуровневые процедуры чтения / записи, которые позволят вам для реализации шифрования на лету без файловой системы игры. По крайней мере, мне не нужно было этого делать. Вы можете найти такой запрос функции и подать его, если он не находится в трекере проблем SQLite.


дополнительным вариантом будет кодек шифрования SQLite, который поставляется с Botan 1.9.x (src / wrap / sqlite).

этот вариант дает вам возможность настроить тип шифрования во время компиляции, включая шифр и режим.

раскрытие: я внес кодек в Botan.