Публикации
Публикации  »  C#, C++

Как зашифровать базу SQLite3 в C#

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

Как оказалось, библиотека System.Data.SQLite.dll (ADO.NET provider для SQLite), которую я скачал с официального сайта System.Data.SQLite и использую для работы с базой в C#, уже содержит две очень полезных функции для шифрования sqlite3_key и sqlite3_rekey, воспользоваться которыми можно просто установив sql-запросом переменные PRAGMA так:

PRAGMA rekey = 'my-encryption-key'  -  для того, чтобы зашифровать уже умеющуюся открытую базу данных новым паролем. Если база не была ранее зашифрована, она зашифровывается. Если она уже была зашифрована, тогда происходит перешифрация базы с новым паролем.

PRAGMA key = 'my-encryption-key'  -  чтобы работать с зашифрованной базой с текущим паролем.

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

Если вы хотите поменять пароль доступа с помощью PRAGMA rekey уже зашифрованной базы, сначала необходимо будет выполнить PRAGMA key с текущим паролем, а затем уже использовать rekey.

Конечно, этот способ не дает 100% защиту от высококлассных хакеров, но по-крайней мере, данные уже будут не в открытом виде, а будут защищены от обычных пользователей и хакеров-новичков, а при достаточно длинном и сложном пароле расшифровать базу будет уже очень не просто.

 

Категория: C#, C++

Комментарии к статье:

15.11.18   Гость PRAGMA rekey = 'my-encryption-key' не шифрует базу сам по себе. Он лишь меняет ключ доступа. Если сделать так, как советует автор то вы не сможете получить доступ к базе путем простого PRAGMA key = 'my-encryption-key', а получите ошибку "неизвестный тип файла". Для того, чтобы получать доступ к БД по ключу, в начале эту базу нужно зашифровать с использованием, например, SQLCipher
12.12.18   Гость у меня библиотека работает именно так, как описал автор, т.е. rekey зашифровывает базу новым ключом

Добавить комментарий: