Шифруйте/Дешифруйте SQLite-базу-данных и используйте ее “на лету”

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

10
задан Berschi 3 April 2010 в 15:11
поделиться

3 ответа

Встроенной поддержки нет, но есть варианты.

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

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

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

13
ответ дан 3 December 2019 в 19:32
поделиться

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

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

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

4
ответ дан 3 December 2019 в 19:32
поделиться

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

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

2
ответ дан 3 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: