Зашифрованный файл или БД в Python - PullRequest
6 голосов
/ 12 июня 2009

У меня есть sqlite3 db, который я вставляю / выбираю в python. Приложение прекрасно работает, но я хочу настроить его так, чтобы никто не мог читать с БД без пароля. Как я могу сделать это в Python? заметьте, я понятия не имею, с чего начать.

Ответы [ 4 ]

9 голосов
/ 04 января 2012

Вы можете использовать SQLCipher.

http://sqlcipher.net/

Полное шифрование базы данных с открытым исходным кодом для SQLite

SQLCipher - это расширение SQLite, которое обеспечивает прозрачное 256-битное AES-шифрование файлов базы данных. Страницы шифруются перед записью на диск и расшифровываются при обратном чтении. Благодаря небольшому размеру и отличной производительности, он идеально подходит для защиты баз данных встроенных приложений и хорошо подходит для мобильной разработки.

  1. Высокая производительность с 5-15% накладных расходов шифрование на многих операциях
  2. 100% данных в файле базы данных зашифрованы. Использует хорошую безопасность. практики (режим CBC, выведение ключей)
  3. Криптография с нулевой конфигурацией и прикладным уровнем Широкая платформа
  4. поддержка: работает с C / C ++, Obj-C, QT, Win32 / .NET, Java, Python, Ruby и т. Д. Для Windows, Linux, iPhone / iOS…
2 голосов
/ 19 апреля 2014

Как предполагает Frontware, вы можете использовать sqlcipher.

pysqlcipher Пакет python позволяет упростить его использование, поскольку он использует объединение кода sqlcipher для компиляции расширения.

Это должен быть только вопрос использования pysqlcipher, как если бы вы использовали обычный sqlite.dbapi2, просто установив правильные крипто-прагмы.

1 голос
/ 12 января 2013

У меня была такая же проблема. Мое приложение может иметь несколько запущенных экземпляров одновременно. Из-за этого я не могу просто зашифровать файл sqlite db и покончить с этим. Я также не верю, что шифрование данных в python является хорошей идеей, так как вы не можете делать никаких серьезных манипуляций с данными в базе данных, находясь в этом состоянии.

С учетом этих ограничений я предложил следующие два решения:

1) Используйте ранее упомянутый SQLCipher. Проблемы, которые я вижу здесь, состоят в том, что мне придется написать свои собственные привязки для Python и скомпилировать их самостоятельно (или заплатить плату). Я мог бы сделать это в любом случае, так как это было бы отличным решением для других разработчиков Python. Если мне это удастся, я отправлю обратно с решением.

2) Если вариант 1 слишком сложен для меня или требует слишком много времени, я буду использовать этот метод. Этот метод не так безопасен. Я буду использовать pycrypto для шифрования файла базы данных. Я буду реализовывать SQL-сервер, который будет расшифровывать файл базы данных, а затем обрабатывать запросы от различных клиентов. Всякий раз, когда нет ожидающих запросов, он перешифрует базу данных. В целом это будет медленнее, и база данных будет временно дешифрована.

Надеюсь, что эти идеи помогут следующему парню.

РЕДАКТИРОВАТЬ 1/13/2013

Я отказался от SQLCipher, потому что не мог заставить его скомпилироваться, и кодовая база пытается использовать OpenSSL, который, в то время как звуковая библиотека, довольно массивен для кодовой базы для простого AES 128. *

Я нашел другую опцию wxSQLite3 и узнал, как выделить только часть шифрования SQLite: https://github.com/shenghe/FreeSQLiteEncryption. Я смог заставить это скомпилировать и работать (с последней версией SQLite3). wxSQLite3 также поддерживает AES 256, что действительно здорово. Следующим моим шагом будет попытка скомпилировать pysqlite (библиотека sqlite, которая встроена в python) с измененным sqlite3.dll. Если это сработает, я настрою pysqlite для поддержки расширенной части шифрования файла wxSQLite3 sqlite3.dll. В любом случае, я постараюсь обновить эту ветку с моими результатами, и в случае успеха я опубликую окончательную базу кода с инструкциями по сборке на Github.

1 голос
/ 12 июня 2009

Базы данных SQLite довольно удобочитаемы, и встроенного шифрования не существует.

Вы обеспокоены тем, что кто-то получает доступ и читает файлы базы данных напрямую или обращается к ним через вашу программу?

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

На ум приходит несколько вариантов:

  1. Защита БД с разрешениями файловой системы, а не шифрованием. Вы не упомянули, какова ваша среда, поэтому я не могу сказать, работоспособна ли она для вас или нет, но, вероятно, это самый простой и надежный способ, поскольку вы не можете пытаться расшифровать то, что не можете прочитать.
  2. Зашифруйте в Python перед записью и расшифруйте в Python после прочтения. Довольно просто, но вы теряете большую часть возможностей операций сопоставления на основе множеств в SQL.
  3. Переключиться на другую базу данных; Аутентификация и разрешения пользователя являются стандартными функциями большинства многопользовательских баз данных. Когда вы сталкиваетесь с ограничениями инструмента, может быть проще взглянуть на другие инструменты, чем взламывать новые функции в текущем инструменте.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...