Зашифрованный файл или db в python

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

  • Проблема с заменой параметра SQLite
  • Как проверить, существует ли таблица?
  • sqlite3.InterfaceError: параметр привязки ошибки 1 - возможно, неподдерживаемый тип
  • Sqlite и Python - вернуть словарь с использованием fetchone ()?
  • sqlite3.OperationalError: рядом с «?»: синтаксическая ошибка
  • Вложенные транзакции с SQLAlchemy и sqlite
  • Нет автоинкремента для Integer Первичный ключ в sqlite3
  • sqlite3.OperationalError: непризнанный токен: «01T00» Python datestamp
  • 5 Solutions collect form web for “Зашифрованный файл или db в python”

    Вы можете использовать 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 …

    Список примеров шифрования Python .

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

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

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

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

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

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

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

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

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

    Учитывая эти ограничения, я придумал следующие два решения:

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

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

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

    EDIT 1/13/2013

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

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

    Interesting Posts

    Как вызвать API Django REST с помощью javascript / jquery / AJAX?

    Отправка HTML в PDF на сайте Django

    Невозможно импортировать модуль GeoIP в Django

    Печать логических значений True / False с помощью метода format () в Python

    Выдавать сглаженный текст на прозрачной поверхности в pygame

    Сравнение двух массивов numpy для равенства, по элементам

    import matplotlib.pyplot дает AttributeError: объект 'NoneType' не имеет атрибута 'is_interactive'

    Python находит n последовательных номеров в списке

    Скопируйте данные из буфера обмена в Linux, Mac и Windows с помощью одного скрипта Python

    Secure Python Markdown Library

    Получение серийного номера процессора или материнской платы?

    Поиск через csv из определенной строки вниз

    Общая память, используемая процессом Python?

    Исключение Python в потоке Thread-1 (скорее всего, возникает при отключении интерпретатора)?

    Как понять этот необработанный HTML-код Yahoo! Финансы при извлечении данных с помощью Python?

    Python - лучший язык программирования в мире.