Зашифруйте / расшифруйте базу данных SQLite и используйте ее «на лету» - PullRequest
10 голосов
/ 03 апреля 2010

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

Ответы [ 4 ]

13 голосов
/ 03 апреля 2010

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

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

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

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

4 голосов
/ 03 апреля 2010

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

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

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

2 голосов
/ 03 апреля 2010

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

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

1 голос
/ 04 мая 2011

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

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

Раскрытие информации: я передал кодек в Botan.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...