Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Sqlite и шифрование


Автор: yogi89 13.4.2010, 10:13
Доброго времени суток, господа.
  Работаю над программой-каталогом фирм, в качестве хранилища данных используется Sqlite.
Одно из требований заказчика - шифрование файла БД. При выборе СУБД, бегло пробежал по возможностям SQLite, увидел, что поддерживается шифрование, обрадовался и остановил выбор на ней. И вот недавно при детальном изучении документации узнал, что шифрование поддерживается на уровне расширений,  а они денег стоят. smile
   Менять движок поздно, платить деньги не вариант, хотелось бы услышать ваше мнение, как поступить, какие есть решения? У меня была мысль зашифровать файл БД и расшифровывать его при каждом запуске в память и работать с ним там, но ума не приложу, как это реализовать посредством API SQLite. smile

Спасибо за ответы. С уважением, Александр. 

Версия sqlite либы - 3.6.23.1.
Для доступа к базе используется API и небольшой набор классов. Взят отсюда. http://www.ararat.cz/doku.php/en:sqlitewrap

Автор: yogi89 14.4.2010, 09:30
Неужели нет толковых идей ни у кого?

Автор: Akella 14.4.2010, 12:51
Цитата(yogi89 @  13.4.2010,  10:13 Найти цитируемый пост)
Одно из требований заказчика - шифрование файла БД.

Используй Interbase, желательно последнюю версию.

Автор: yogi89 26.4.2010, 11:03
Вопрос решен. 
http://github.com/sjlombardo/sqlcipher
Собрал библиотеку скулайта с данным экстеншином. Шифрование работает. smile

Автор: former 26.4.2010, 11:42
Цитата(yogi89 @  26.4.2010,  11:03 Найти цитируемый пост)
Собрал библиотеку скулайта с данным экстеншином. Шифрование работает.

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

Автор: yogi89 26.4.2010, 12:36
Без проблем. 
Библиотека во вложении. 
К ней нужна библиотека libeay32.dll, входящая в комплект OpenSSL. Найти последнюю - не проблема. Я собирал, линкуя с версией 0.9.8m.
Для задания и изменения ключа используются две функции: sqlite3_key и sqlite3_rekey. Или через запросы `PRAGMA key(rekey)`. Подробнее на сайте http://github.com/sjlombardo/sqlcipher
Здесь обсуждения и помощь http://groups.google.com/group/sqlcipher

Автор: AntonH851 2.9.2010, 15:32
А как это штука собирается?


Автор: UncleVader 23.10.2010, 14:52
yogi89,
Не мог бы ты скомпилить новый релиз библиотеки или поподробнее рассказать как ее скомпилить самому?
Спасибо! 

Автор: K1L0z 14.2.2011, 20:51
Кто-нибудь собирал библиотеку? Или последняя версия сама по себе поддерживает шифрование?

Автор: UncleVader 15.2.2011, 09:15
Цитата(K1L0z @ 14.2.2011,  20:51)
Кто-нибудь собирал библиотеку? Или последняя версия сама по себе поддерживает шифрование?

Я собирал, потратил около недели на то чтобы хоть как-то разобраться!
Сама по себе она не поддерживает шифрование, только самосбор с доп. библиотеками. 
Могу поделиться своей сборкой версии 3.7.2

Автор: K1L0z 15.2.2011, 12:39
UncleVader,
Буду рад)))
И я был бы очень признателен, если бы вы рассказали, как она собирается... у меня с английским не очень, в основном пользуюсь переводчиками, так что сам я наверное на этом поприще задержусь куда больше недели... :(
Кстати, а вы случаем собирали не по инструкции ниже?
Цитата
1. Установить Win32OpenSSL-0_9_8l.exe в C:\OpenSSL
2. Установить tcltk-8.4.1-1.exe (может и без tcltk соберется, но я ставил)
3. Скопировать libeay32.dll из OpenSSL в директорию sqlcipher
4. Скопировать файлы из C:\OpenSSL\lib\MinGW в c:\MinGW\lib 
5. Запустить MSYS и перейти в каталог sqlcipher (например, так: cd /c/sqlcipher)
6 Выполнить в MSYS
Цитата
./configure --disable-tcl --disable-amalgamation CFLAGS="-
DSQLITE_HAS_CODE -I/c/OpenSSL/include" LDFLAGS="-leay32 -L/c/OpenSSL/lib" 

make 

make dll


У меня при первой же команде в MSYS выдает ошибку:
Цитата
Root@GURU /c/sqlcipher
$ ./configure --disable-tcl --disable-amalgamation CFLAGS="-
DSQLITE_HAS_CODE -I/c/OpenSSL/include" LDFLAGS="-leay32 -L/c/OpenSSL/lib"
checking build system type... i686-pc-mingw32
checking host system type... i686-pc-mingw32
checking for gcc... gcc
checking for C compiler default output file name...
configure: error: C compiler cannot create executables
See `config.log' for more details.
configure: WARNING: Cache variable ac_cv_env_CFLAGS_value contains a newline.

и не понятно (по крайней мере мне) почему...

Автор: UncleVader 17.2.2011, 14:01
Цитата

Кстати, а вы случаем собирали не по инструкции ниже?
...

и по этой в том числе, но почему-то не все так просто и однозначно, там еще несколько тонкостей, уже сейчас всего и не помню, сомпилил с горем пополам и забыл. Вобщем  http://upload.com.ua/get/902362401/sqlite_3.7.2_with_crypt.rar

а по поводу 
Цитата

и не понятно (по крайней мере мне) почему...

команду надо аккуратно копипастить или набирать руками, чтобы не было переносов

Автор: K1L0z 17.2.2011, 15:36
Спасибо))))))
размерчик правда расстроил прямо :( не уж то с icudt38.dll работает быстрее чем с Delphi-йской Utf8ToUnicode?

а на счет ошибки - она все равно остается, вставляю я с переносом или набираю ручками строку - разницы нет :(
видимо, действительно что-то ещё нужно  smile 

Автор: UncleVader 18.2.2011, 09:47
Цитата(K1L0z @ 17.2.2011,  15:36)
Спасибо))))))
размерчик правда расстроил прямо :( не уж то с icudt38.dll работает быстрее чем с Delphi-йской Utf8ToUnicode?

Размер действительно не радует, но из бесплатных вариантов этот кодек единственный, а он разработан под библиотеку icu, так что тут уж ничего не поделать

Автор: Чип 18.2.2011, 14:10
Люди, помогите пожалуйста и мне!

Проблема ровно такая же как и у топикстартера, только SQLCipher мне нужен скомпиленный под .Net.

На sqlcipher.net есть уже скомпиленная версия, но стоит 150$: SQLCipher .DLL and ADO.NET provider (1-developer) - $149.99.

Буду КРАЙНЕ благодарен тому кто поможет мне самому собрать данную штукенцию или соберёт её для меня, если это конечно не займёт много времени.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)