Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ SQLite и криптография

Автор: 512es 23.3.2010, 4:13

Набрёл на такую штуку:
http://zetetic.net/software/sqlcipher

Кто-нибудь пробовал? Как собрать с qt4?

Автор: ViGOur 27.3.2010, 14:03

Ты по всей видимости первый, как соберешь, напиши как это сделал... ;)

Автор: igor_bogomolov 23.4.2010, 23:47

Цитата(ViGOur @ 27.3.2010, 15:03) *
Ты по всей видимости первый, как соберешь, напиши как это сделал...
Видимо я первый, так что напишу... Точнее уже написал.
http://www.wiki.crossplatform.ru/index.php/%D0%9F%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%B0_SQLCipher_%D0%BA_Qt#.D0.9A.D1.80.D0.B0.D1.82.D0.BA.D0.BE.D0.B5_.D0.BE.D0.BF.D0.B8.D1.81.D0.B0.D0.BD.D0.B8.D0.B5_SQLCipher.

 sqlcipher.zip ( 67.63 килобайт ) : 374
 

Автор: AntonH851 25.5.2010, 8:07

подскажите пожалуста, что не так я сделал:

почему то ругается на ./configure
что это за каталог такой?

Автор: Litkevich Yuriy 25.5.2010, 10:55

Цитата(AntonH851 @ 25.5.2010, 12:07) *
что это за каталог такой?
это не каталог, а файл shell-сценария, ты же сам пишешь:
./configure --prefix=.....

Автор: AntonH851 25.5.2010, 12:14

Цитата(Litkevich Yuriy @ 25.5.2010, 11:55) *
Цитата(AntonH851 @ 25.5.2010, 12:07) *
что это за каталог такой?
это не каталог, а файл shell-сценария, ты же сам пишешь:
./configure --prefix=.....

а где этот файл должен быть?
или в каком каталоге эти команды надо выполнять?

Автор: alex977 25.5.2010, 12:53

Цитата(AntonH851 @ 25.5.2010, 13:14) *
./configure --prefix=.....

а где этот файл должен быть?
или в каком каталоге эти команды надо выполнять?


Такой файл есть в каждом проекте, предусматривающем сборку из исходных кодов.
Соответственно, ./configure означает - выполнить сценарий (configure) из текущего каталога (./) - т.е. в каталоге того проекта, который и нужно собрать.

P.S. Опасно не знать таких вещей и пытаться что-то делать в Линуксе. Можно такого наворотить...

Автор: Litkevich Yuriy 25.5.2010, 13:09

Цитата(alex977 @ 25.5.2010, 16:53) *
Опасно не знать таких вещей и пытаться что-то делать в Линуксе.
а он в виндовозе, видимо из под cigwina

Автор: igor_bogomolov 25.5.2010, 15:34

Цитата(Litkevich Yuriy @ 25.5.2010, 14:09) *
он в виндовозе, видимо из под cigwina
Это http://www.mingw.org/wiki/MSYS
Цитата(AntonH851 @ 25.5.2010, 9:07) *
почему то ругается на ./configure
Посмотрите внимательней на свой скриншет. У вас там ошибка в написании. Команды configue не существует :lol:

Автор: AntonH851 26.5.2010, 7:43

Цитата(igor_bogomolov @ 25.5.2010, 16:34) *
Цитата(Litkevich Yuriy @ 25.5.2010, 14:09) *
он в виндовозе, видимо из под cigwina
Это http://www.mingw.org/wiki/MSYS
Цитата(AntonH851 @ 25.5.2010, 9:07) *
почему то ругается на ./configure
Посмотрите внимательней на свой скриншет. У вас там ошибка в написании. Команды configue не существует :lol:


Спасибо! Только почему то все равно выдает ту же ошибку:

Путь вроде к драйверу правильно указан... а что там еще может быть не так?

Автор: Litkevich Yuriy 26.5.2010, 12:27

AntonH851, а у тебя файл-то такой есть?

Автор: igor_bogomolov 26.5.2010, 17:40

Конечно же выдает. Будь внимательнее, и двигайся по инструкции по шагам с самого начала, а не с середины.
В этот раз ты пытался запустить скрипт из домашней директории (~).

Т.е. ты с начала в консоли MSYS должен перейти в каталог с исходниками sqlcipher, а уже потом делать ./configure
Сборка самого sqlcipher и плагина для Qt, это два разных этапа.



Цитата(цитата с первого скриншета)
$ cd /c/Qt/2010.02/qt/src/plugins/sqldrivers/sqlcipher
Сюда на первом этапе тебе не надо. Тут ты потом будешь плагин собирать.
С начало нужно собрать сам sqlcipher. Для этого из консоли MSYS перейти в каталог с исходниками sqlcipher, в те что ты склонировал гитом. И вот в нем уже тебе надо будет скомандовать ./configure .......

Автор: AntonH851 27.5.2010, 8:14

./configure вроде выполнилось
но вот make выдало ошибку:


Автор: igor_bogomolov 27.5.2010, 9:20

не знаю в чем ошибка. У меня таких проблем не было. Может опять где-нибудь ошибся.
Сборка проверялась не один раз. И описание тоже. Даже разработчик sqlcipher http://groups.google.com/group/sqlcipher/browse_thread/thread/fd8b2763e7ae1291 на наш мануал

Автор: AntonH851 4.7.2010, 17:04

Очень нужна эта штука, решил еще раз попробовать...
Первым делом как я понимаю(в случае с виндой) надо установить msys...
При установке msys, после того как я указал путь к mingw начался какой-то процесс... и в результате и получил вот такое сообщение:

Цитата
Oh joy. You do not have c:/qt/2010.02/mingw/bin/make.exe. Keep it that way.

Если я правильно понимаю, это значит что необнаружен файл make.exe(которого действительно нет, потому что есть mingw32-make.exe), и что-то вроде "сделайте это другим путем".
Это не должно повлиять на дальнейший процесс сборки sqlcipher?
Помогите пожалуйста
Если есть у кого-нибудь OpenSSL дайте рабочую ссылку, а то чет не могу найти ту версию что указана нигде, или подойдет более поздняя?

Автор: Litkevich Yuriy 4.7.2010, 18:00

Цитата(AntonH851 @ 4.7.2010, 21:04) *
необнаружен файл make.exe(которого действительно нет, потому что есть mingw32-make.exe)
можно бросить рядом с mingw32-make.exe bat-файл, make.bat, такого содержания:
mingw32-make.exe %*

Автор: AntonH851 30.8.2010, 10:50

Цитата(Litkevich Yuriy @ 4.7.2010, 19:00) *
Цитата(AntonH851 @ 4.7.2010, 21:04) *
необнаружен файл make.exe(которого действительно нет, потому что есть mingw32-make.exe)
можно бросить рядом с mingw32-make.exe bat-файл, make.bat, такого содержания:
mingw32-make.exe %*



это не помогло, переименовал mingw32-make.exe в make.exe, вроде проглотило, только выдало сообщение об обратном переименовании...

еще вот такой вопрос возник по конфигурированию:

./configure --prefix=/QTPATH/src/plugins/sqldrivers/sqlcipher --disable-tcl --disable-amalgamation
CFLAGS="-DSQLITE_HAS_CODEC -I../OpenSSL/include /c/Windows/System32/libeay32.dll"


нужно ли при этом изменять опцию -I../OpenSSL/include? т.е. если у меня OpenSSL находится в C:\OpenSSL\include
то я должен писать -I/C:/OpenSSL/include?


Автор: molchanoviv 30.8.2010, 11:03

Цитата(AntonH851 @ 30.8.2010, 11:50) *
нужно ли при этом изменять опцию -I../OpenSSL/include? т.е. если у меня OpenSSL находится в C:\OpenSSL\include
то я должен писать -I/C:/OpenSSL/include?


Да. Туда пишется путь к хидерам OpenSSL.

Автор: igor_bogomolov 30.8.2010, 19:00

Цитата(molchanoviv @ 30.8.2010, 12:03) *
Да. Туда пишется путь к хидерам OpenSSL.
Путь то пишется, но не так. В MSYS это будет выглядеть так -I/с/OpenSSL/include

Автор: AntonH851 1.9.2010, 9:54

Ну вот, выполняю configure:

Цитата
./configure --prefix=/c/qt/2010.02/qt/src/plugins/sqldrivers/sqlcipher --disable-tcl --disable-amalgamation
CFLAGS="-DSQLITE_HAS_CODEC -I/c/OpenSSL/include /c/Windows/System32/libeay32.dll"


Уже прогресс :). Выполняю make. Среди прочего вывода есть сообщения:

Цитата
gcc.exe: c:/Windows/System32/libeay32.dll: linker input file unused because linking not done


и такое:

Цитата
make: Circular utf.o <- utf.o dependency dropped.


а в конец вот это:



bin, include, lib в каталоге драйвера не появились...
Если можно, подскажите пожалуйста, как можно исправить вышеуказанные ошибки

Автор: igor_bogomolov 3.9.2010, 21:08

Цитата(AntonH851 @ 1.9.2010, 10:54) *
Если можно, подскажите пожалуйста, как можно исправить вышеуказанные ошибки
Была такая проблема, связанная с переходом на новую версию SQLite. Вроде разработчики пофиксили этот баг. Скачай новую версию http://github.com/sjlombardo/sqlcipher/tree/v1.1.7, и попробуй собрать еще раз.

Подробнее этот вопрос обсуждается в http://groups.google.com/group/sqlcipher/browse_thread/thread/46d4ebbb2e6a93e8

Автор: 512es 5.9.2010, 0:06

о! Игорь! спасибо большущее))
у меня так и не дошли руки опробовать, уже и забыл что есть такой плагин)
а тут снова понадобилось, нагуглил вот чего:
http://www.zetetic.net/blog/2010/05/26/building-sqlcipher-with-qt/
и попал на твою статью в вики))
какого было моё удивление что тема эта была ещё давным давно инициирована мной))))

статья шикарная! то что надо) особенно хорошо что сборка описывается как под линукс так и под винду)
отличный способ для этого написать свой плагин бд)

Автор: 512es 5.9.2010, 19:40

Кстати, как вы думаете, коллеги:
Насколько надёжна такая шифрованная база?
Возможны ли случаи когда данные будут корруптиться?
И как быть с восстановлением в случае аппаратного сбоя? Не шифрованную базу на мой взгляд легче восстановить.

Вот ещё бы стандартный консольный менеджер склайта обучить работать с такой базой..

А ещё, насколько надёжно такое шифрование? Там вроде AES 256..

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


(сорь я ещё не читал мануалы, но думаю это обсуждение будет полезно остальным, кто сюда зайдёт)

Автор: Litkevich Yuriy 5.9.2010, 20:31

Цитата(512es @ 5.9.2010, 23:40) *
А ещё, насколько надёжно такое шифрование? Там вроде AES 256..
тему разделил: http://www.forum.crossplatform.ru/index.php?showtopic=5540

Автор: igor_bogomolov 14.9.2010, 7:33

Вот появилось еще одно руководство по сборке SQLCipher нагло у нас скомуниздинное
http://www.qtcentre.org/wiki/index.php?title=Building_QSQLITE_driver_with_AES-256_encryption_support

Автор: Litkevich Yuriy 14.9.2010, 9:36

надо в нашей вики сделать вариант на аглицком

Автор: igor_bogomolov 14.9.2010, 9:54

Хм...
Такое впечатление что эту статью опубликовал сам разработчик sqlcipher. Раньше он давал ссылки на нашу Wiki и предлагал перевести её гуглом. Тем не менее вопрошающих было много и, видимо, он решил сделать английский вариант
http://groups.google.com/group/sqlcipher/browse_thread/thread/fbcbaae70414e01e

--------------------------------------------------------

Хотя у него свой блог есть. Так что, наверное, это написал кто то другой. Все равно не приятно что нет ссылки на первоисточник.

Автор: 512es 16.9.2010, 0:59

Ну, там и линк на оригинал есть тоже..)

Цитата
As a source http://www.wiki.crossplatform.ru/index.php/%D0%9F%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%B0_SQLCipher_%D0%BA_Qt was used.


А теперь по теме:
Выяснил, что в Gentoo Qt использует системную библиотеку sqlite. Qt собирается с ключом -system-sqlite. Вообщем то это даже лучше, потому что системная библиотека часто обновляется, в ней исправляют глюки, легко ставить плагины типа icu, fts3 и т.д.

Вот бы добавить в ebuild и SQLCipher..)))

Автор: igor_bogomolov 16.9.2010, 8:34

Цитата(512es)
Ну, там и линк на оригинал есть тоже..)
Оу, действительно есть. Как то я её при первом прочтении не заметил. Теперь я спокоен :)

Цитата(512es)
Вот бы добавить в ebuild и SQLCipher..)))
Не знаю что такое ebuild (видимо какой то менеджер пакетов в Gentoo), а вот создать патч для Qt мысль была. Что бы можно было пересобирать Qt c поддержкой sqlcipher привычным способом configure -plugin-sql-sqlcipher. Но мне лень этим заниматься так как я сам sqlcipher не использую

Автор: kwisp 16.9.2010, 8:44

Цитата(512es @ 16.9.2010, 1:59) *
Вот бы добавить в ebuild и SQLCipher..)))

так что тебе мешает. пиши ebuild сам или ищи в оверлеях.

Автор: 512es 17.9.2010, 15:10

хмм.. а можно как то сделать патч SQLCipher'а, который накладывается на обычные сорцы склайта?

Автор: AlekseyK 9.11.2010, 13:31

Цитата(igor_bogomolov @ 14.9.2010, 7:33) *
Вот появилось еще одно руководство по сборке SQLCipher нагло у нас скомуниздинное
http://www.qtcentre.org/wiki/index.php?title=Building_QSQLITE_driver_with_AES-256_encryption_support

Ну оно не нагло скомунизденное, а дополненное, потому как в данном руководстве некоторые пункты были пропущены и неопытный человек, который MinGW не знает не смог собрать бы.

Автор: AlekseyK 9.11.2010, 13:36

Собрал примерчик SQL Widget Mapper, всё работает, но... не шифрует ничего: файлы (с шифрацией - QSQLCIPHER и без - QSQLITE) на вид совершенно одинаковы и SQLite Expert свободно "шифрованный" файл открывает. Что я мог сделать не так?

Автор: igor_bogomolov 9.11.2010, 14:02

Цитата(Гость_AlekseyK_* @ 9.11.2010, 13:31) *
Ну оно не нагло скомунизденное, а дополненное, потому как в данном руководстве некоторые пункты были пропущены и неопытный человек, который MinGW не знает не смог собрать бы.
Пусть так. Я на самом деле не против, да и ссылку на нас они приложили. Это просто первая реакция такая была :) Хотя о каких дополнениях вы говорите так и не понял. :unknown:

Цитата(Гость_AlekseyK_* @ 9.11.2010, 13:36) *
Собрал примерчик SQL Widget Mapper, всё работает, но... не шифрует ничего
Просто так оно шифровать и не будет. query.exec("pragma key = 'password';"); сделали?

Лучше всего проверить работоспособность при помощи sqlbrowser из демонстрационных примеров Qt

Автор: AlekseyK 9.11.2010, 14:25

Цитата(igor_bogomolov @ 9.11.2010, 13:02) *
Просто так оно шифровать и не будет. query.exec("pragma key = 'password';"); сделали?

Конечно, я в Вашем примере принципиального ничего не менял (его пока тестирую):
query.exec("pragma key = '12345';");

Только попробовал 2 варианта:
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLCIPHER");
    //QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

    QString tableName = "test_crypted.db";
    //QString tableName = "test_plain.db";

    if (!QFile::exists(tableName)) {
....

Результат одинаков и SQLite свободно оба варианта читает.

Цитата(igor_bogomolov @ 9.11.2010, 13:02) *
Лучше всего проверить работоспособность при помощи sqlbrowser из демонстрационных примеров Qt

Что-то я такого не нашёл? И потом как он мне может помочь здесь? Шифрования нет.

P.S. Прошу прощения, sqlbrowser я нашёл.

P.P.S. SqlBrowser свободно читает "зашифрованный" файл.

Цитата(igor_bogomolov @ 9.11.2010, 13:27) *
Вы саму сборку sqlcipher проверяли. Если из командной строки (имею в виду консоль шифрованой sqlite) БД создать, она шифруется?

Как её проверить? Драйвер собрался, виден? По какой причине она может не шифровать?

Автор: igor_bogomolov 9.11.2010, 14:27

Цитата
И потом как он мне может помочь здесь?

Что бы удобнее было тестироваться. Просто с sqlbrowser ничего компилировать не надо. Только сам plagin sqlchipher. Запросы вводятся в поле ввода. Находится он в %QTDIR%/demos/sqlbrowser

Вы саму сборку sqlcipher проверяли. Если из командной строки (имею в виду консоль шифрованой sqlite) БД создать, она шифруется?

Автор: AlekseyK 9.11.2010, 14:32

Драйвер собрался, виден!

Как её проверить? Драйвер собрался, виден. По какой причине она может не шифровать?

Автор: igor_bogomolov 9.11.2010, 14:36

Цитата(AlekseyK @ 9.11.2010, 14:25) *
Как её проверить?
Ну как это как? Создать БД и посмотреть файл базы данных в любом текстовом редакторе. Там сразу видно, шифрованная она или нет. Главное про прагму не забудьте.
А нужно это, для того что бы убедиться что с сама sqlcipher собрана и работает так как ожидается. Потом уже двигаться дальше и смотреть что не так с плагином для Qt или приложением

Цитата(AlekseyK @ 9.11.2010, 14:32) *
Драйвер собрался, виден!
Я говорю не про драйвер для Qt. А про сам sqlcipher

Автор: AlekseyK 9.11.2010, 15:05

Я понял, проверил - не шифрует. ПО моему у Вас в руководстве кое что пропущено:
http://sqlcipher.net/documentation

Цитата
# You must define SQLITE_HAS_CODEC and SQLITE_TEMP_STORE=2 in your application when including SQLCipher


Цитата
./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="/path/to/libcrypto.a"
make


P.S. А нет, не пропущено, опять прощу прощения.

Похоже, что путь к заголовкам OpenSSL у меня был неверно указан, версия OpenSSL поменялась, теперь нужно так:
Цитата
./configure --prefix=/qt/src/plugins/sqldrivers/sqlcipher --disable-tcl --disable-amalgamation
CFLAGS="-DSQLITE_HAS_CODEC -I/c/OpenSSL-Win32/include /c/Windows/System32/libeay32.dll"

Пересобрал, но всё равно не шифрует. Есть идеи?

Автор: igor_bogomolov 9.11.2010, 15:19

Цитата(AlekseyK @ 9.11.2010, 14:52) *
Я понял, проверил - не шифрует.
Ну вот, значит проблема в самом sqlcipher. Она достаточно активно развивается. Возможно что то поломали в новой версии, я не в курсе.
Попробуйте связаться с разработчиками http://groups.google.com/group/sqlcipher


ОФФ:


Ого. Почитал сейчас в google группе и сходил по ссылке (http://sqlcipher.net/downloads). В общем из-за того что народ мучается и не умеет собирать это дело под windows они начали продавать уже скомпилированную версию за 100 баксов. Фигасе


Цитата
Пересобрал, но всё равно не шифрует. Есть идеи?
Больше нет. Либо что то изменилось с последнего момента как я её собирал, либо вы где то ещё ошиблись при сборке. Проверить сейчас возможности нет, нет винды на работе

Автор: AlekseyK 9.11.2010, 15:59

Да, ошибся при сборке, окончательный вариант:

Цитата
./configure --prefix=/qt/src/plugins/sqldrivers/sqlcipher --disable-tcl --disable-amalgamation CFLAGS="-DSQLITE_HAS_CODEC -I/c/OpenSSL/include /c/Windows/System32/libeay32.dll"

Пробовал сборку супротив Win32 OpenSSL v0.9.8m, и с Win32 OpenSSL v1.0.0a, остановился пока на 0.98.

Всё равно не работает пока. Блин.

А LDFLAGS="/path/to/libcrypto.a" не нужно указывать?! Что-то я его не нашёл, только в директории git-a.

Автор: AlekseyK 9.11.2010, 20:08

В общем конечно они подробно расписывают как решить проблемы сборки здесь: http://groups.google.com/group/sqlcipher/browse_thread/thread/55c6296b56bf4533 Кто собирал под Линукс может вспомнить про флажок -L и собрать, ;) остальным нужно будет прочитать вышеуказанный источник.

Сборка супротив Win32 OpenSSL v0.9.8m:

Цитата
./configure --prefix=/qt/src/plugins/sqldrivers/sqlcipher --disable-tcl --disable-amalgamation CFLAGS="-DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2 -I/c/OpenSSL/include /c/Windows/System32/libeay32.dll -L/c/OpenSSL/lib/MinGW" LDFLAGS="-leay32"


Сборка супротив Win32 OpenSSL v1.0.0a:
Цитата
./configure --prefix=/qt/src/plugins/sqldrivers/sqlcipher --disable-tcl --disable-amalgamation CFLAGS="-DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2 -I/c/OpenSSL-Win32/include /c/Windows/System32/libeay32.dll -L/c/OpenSSL-Win32/lib/MinGW" LDFLAGS="-leay32"


Всё работает. При тесте в sqlite3.exe не забывайте "pragma key = '12345';" (или какой у вас там пароль).

P.S. Ребята! Продаю сборки sqlcipher под Windows по демпинговым ценам - 50$!!! ;)

P.P.S. А вообще я бы расширил руководство, принимая во внимание вышесказанное, а также http://www.qtcentre.org/wiki/index.php?title=Building_QSQLITE_driver_with_AES-256_encryption_support_%28Windows/MinGW%29#MSYS.

Автор: igor_bogomolov 9.11.2010, 20:33

AlekseyK, я только что скачал последний sqlcipher и openssl v1.0.0a. Собирал в точности по существующему руководству из нашей Wiki. Всё работает :)

Цитата(AlekseyK @ 9.11.2010, 20:08) *
а также настройку MSYS.
Теперь понятно что у тебя не работало. Видимо ты не правильно пути до mingw задал при установке msys. В моём руководстве написано так
Цитата
Скачиваем и устанавливаем на свой компьютер MSYS. В конце установки будет задано несколько вопросов, соглашаемся с ними и указываем путь до MinGW (входит в поставку Qt).
По ссылке конечно более правильно сделано, оно поможет решить проблему если инсталяция изначально была не совсем правильная

Цитата(AlekseyK @ 9.11.2010, 20:08) *
А вообще я бы расширил руководство
Ну так расширь, это же Wiki, правь спокойно :)

Цитата
P.S. Ребята! Продаю сборки sqlcipher под Windows по демпинговым ценам - 50$
Ну что ж, я не протестую, но первую прибыль сам понимаешь кому ;)

Автор: AlekseyK 9.11.2010, 20:53

Цитата(igor_bogomolov @ 9.11.2010, 19:33) *
В конце установки будет задано несколько вопросов, соглашаемся с ними и указываем путь до MinGW (входит в поставку Qt).

Нет не поэтому: этот пункт я внимательно читал и сделал в точности. Сборка как раз нормально проходила. Проблемы были с путями: -I/c/OpenSSL/include, -L и т.п.

Цитата(igor_bogomolov @ 9.11.2010, 19:33) *
Ну что ж, я не протестую, но первую прибыль сам понимаешь кому ;)

Право первой брачной ночи (и прибыли) давно отменили. ;) А если серьёзно: большое спасибо за статью! :)

Цитата(igor_bogomolov @ 9.11.2010, 19:33) *
Ну так расширь, это же Wiki, правь спокойно :)

Сделаем, а то до 5-й страницы не у всех может терпения хватить. ;)

Ан нет, не дают править:

Цитата
У вас нет разрешения на действие «исправление этой страницы» по следующей причине:
Запрошенное действие могут выполнять только участники из групп Неактивирован, Новичок, Администратор, Модератор, Free DevStudio, Участник, Администратор WIKI.

Автор: igor_bogomolov 9.11.2010, 20:58

Цитата(AlekseyK @ 9.11.2010, 20:53) *
Ан нет, не дают править:
Там в верхнем правом углу есть "Представиться системе". Логин и пароль такой же как на форуме.

Автор: AlekseyK 9.11.2010, 21:15

Спасибо, поправил.

Автор: AlekseyK 12.12.2010, 17:32

Это всё интересно: но как собрать sqlcipher в Visual Studio? Если у меня Qt SDK для VS?

Автор: igor_bogomolov 18.12.2010, 3:06

AlekseyK, личный ящик у тебя пока не работает, поэтому решил написать здесь.
Коментарии к твоей последней правке на Wiki.

С правкой некоторых путей я согласен. Замена QTPATH на qt правильна, т.к. этот путь прописан в файле конфигурации MSYS. С заменой пути до OpenSSL не согласен. Исходники данной библиотеки могут быть где угодно. Но в принципе, это не так важно, думаю пользователь и сам догадается изменить путь до библиотеки. Так что можно оставить так. А вот теперь по поводу добавленных флагов компиляции. С этим нужно аккуратнее. Их должно быть минимальное количество, только те, что необходимы для сборки. Не забывай, что это всего лишь пример, он должен быть общим, а не повторять твою ситуацию. Поэтому, раз ты добавил -DSQLITE_TEMP_STORE=2, объясни зачем это нужно, потому что я собирал без него и все прекрасно работало. Если в этом флаге обязательной необходимости нет, его нужно убрать.

Далее, LDFLAGS="-leay32" нам совершенно не нужно, библиотека и так подключена. Так же как и -L/c/OpenSSL/lib/MinGW.

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

Либо поправьте всё сами, либо я отменю твои последние изменения.

Автор: AlekseyK 18.12.2010, 16:53

Я объяснял зачем это нужно: -DSQLITE_TEMP_STORE=2 указан на сайте разработчика, LDFLAGS="-leay32" так же как и -L/c/OpenSSL/lib/MinGW нужны, так как без них у меня не собиралось, так же как и у многих (см. группу SQLCipher в на гугле).

Автор: Litkevich Yuriy 18.12.2010, 18:03

Цитата(AlekseyK @ 18.12.2010, 18:53) *
Я объяснял
В Вики или на форуме?

Автор: AlekseyK 18.12.2010, 18:10

На форуме, не смог дописать: редактирование сообщения не работает.

Автор: igor_bogomolov 18.12.2010, 19:40

Цитата(AlekseyK @ 18.12.2010, 16:53) *
Я объяснял зачем это нужно: -DSQLITE_TEMP_STORE=2 указан на сайте разработчика,
Действительно. Забыл уже просто.
Цитата(AlekseyK @ 18.12.2010, 16:53) *
(см. группу SQLCipher в на гугле).
Я так же как и ты нахожусь в этой группе и периодически слежу за тем, что там происходит, в том числе за твоим тредом :)

Автор: AlekseyK 18.12.2010, 20:05

Цитата(igor_bogomolov @ 18.12.2010, 18:40) *
Я так же как и ты нахожусь в этой группе и периодически слежу за тем, что там происходит, в том числе за твоим тредом

Ну и? Вот моё сообщение:
http://www.forum.crossplatform.ru/index.php?s=&showtopic=4577&view=findpost&p=42582
и ссылка, что я в ней приводил:
http://groups.google.com/group/sqlcipher/browse_thread/thread/55c6296b56bf4533
Я как бы сам дошёл до флага -L, но как видишь у многих эта проблема была. Кашу маслом не испортишь как говорится. Посему предлагаю оставить всё как есть.

P.S. Это хорошо, что ты за моим тредом следишь, ;) а собрать проект с sqlite3.c под Visual C++ пробовал? Файл проекта там по идее такой должен быть:
TARGET  = qsqlcipher

HEADERS  = ../../../sql/drivers/sqlite/qsql_sqlite.h
SOURCES  = smain.cpp \
    ../../../sql/drivers/sqlite/qsql_sqlite.cpp
QT += sql
SQLITE_TEMP_STORE=2
    
!system-sqlite:!contains( LIBS, .*sqlite.* ) {
    CONFIG(release, debug|release):DEFINES *= NDEBUG
    DEFINES += SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE

    INCLUDEPATH += include

    win32 {
  HEADERS += ./include/sqlite3.h ./include/sqlite3ext.h
  SOURCES += sqlite3.c
        LIBS += ./lib/libeay32MD.lib
    }
    unix {
QMAKE_RPATHDIR += lib
        LIBS += -Llib -lsqlite3
    }

} else {
    LIBS *= $$QT_LFLAGS_SQLITE
    QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE
}

include(../qsqldriverbase.pri)

Автор: igor_bogomolov 19.12.2010, 1:03

Цитата(AlekseyK @ 18.12.2010, 20:05) *
Посему предлагаю оставить всё как есть.
Хорошо. Я своим предыдущем сообщением пытался дать понять, что я с тобой согласился :)

Цитата(igor_bogomolov @ 18.12.2010, 19:40) *
а собрать проект с sqlite3.c под Visual C++ пробовал?
Нет не пробовал. Не имею MSVC, и сборка под него меня не интересует


Автор: AlekseyK 19.12.2010, 1:25

Цитата(igor_bogomolov @ 19.12.2010, 0:03) *
Хорошо. Я своим предыдущем сообщением пытался дать понять, что я с тобой согласился :)

Вот и ЛАДушки! :)

Цитата(igor_bogomolov @ 19.12.2010, 0:03) *
Нет не пробовал. Не имею MSVC, и сборка под него меня не интересует

А я подумал: раз следишь за тредом... А а я вот имею MSVC... или он меня ;) :D Всё равно в конце концов я его конечно ;)

Автор: vkjr 29.1.2011, 18:29

Спасибо, ваша статья очень помогла :)

Автор: AlekseyK 26.7.2011, 19:47

1) Похоже, что последнее время собрать sql плугин для Qt стало невозможным без ручного вмешательства, проблема вот в чём: https://bugreports.qt.nokia.com/browse/QTBUG-9955?focusedCommentId=159899&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-159899. Т.е. файлы заголовков в Qt SDK лежат не там где нужно, поэтому автоматом собрать плугин не получится, только ручками копировать, а это не удобно. Кто-нибудь сталкивался с таким, это лечится?

2) Кому-то удавалось собрать плугин, если он лежит не дереве Qt (например, \QtSDK\QtSources\4.7.3\src\plugins\sqldrivers\sqlcipher\), а в произвольном месте, чтобы его можно было включить в контроль версий, автоматически собрать, а собранную библиотеку (плугин) прилинковать к своей программе? Интересуют Windows (VS), Linux (Mac по возможности)?

Пример проекта:

TARGET     = qsqlcipher

SOURCES    = smain.cpp
HEADERS    += sqlite3.h stdafx.h
SOURCES    += sqlite3.c

include(../../../sql/drivers/sqlite/qsql_sqlite.pri)

QT += sql
SQLITE_TEMP_STORE=2
          
!system-sqlite:!contains( LIBS, .*sqlite.* ) {
    CONFIG(release, debug|release):DEFINES *= NDEBUG
    DEFINES += SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE

    INCLUDEPATH += include

    win32 {
        INCLUDEPATH += c:\OpenSSL\include
        HEADERS    += c:\OpenSSL\include\openssl\evp.h
        LIBS += ./lib/libeay32MD.lib
    }
    unix {
    QMAKE_RPATHDIR += lib
        LIBS += -Llib -lsqlite3
    }

} else {
    LIBS *= $$QT_LFLAGS_SQLITE
    QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE
}

include(../qsqldriverbase.pri)

Автор: AlekseyK 27.7.2011, 19:30

Решено, если кому надо - пишите письма ;)

Автор: [Matrix] 14.9.2011, 9:52

Цитата(AlekseyK @ 27.7.2011, 20:30) *
Решено, если кому надо - пишите письма ;)



я подумываю перейти с qtcreatora в студию, скорее всего будет нужно пересобрать драйвер с mingw на nmake. так что скоро будет много вопросов. а не рассматриваете вариант доработки статьи на wiki?

Автор: ViGOur 14.9.2011, 10:08

Цитата(AlekseyK @ 27.7.2011, 20:30) *
Решено, если кому надо - пишите письма ;)

AlekseyK, и правда чего писать письма, если проще написать в вики и саммому если что позднее освежить знания и другим помочь! :)

Автор: [Matrix] 3.2.2012, 18:52

был драйвер, собранный с sqlcipher 1.1.8, на нем зашифрована БД, после обновления до sqlcipher 2, не расшифровывалась БД, пришлось откатиться назад

Автор: [Matrix] 3.2.2012, 20:53

с 1.1.9, 1.1.10 все работает, начиная с версии 2.0.0 не работает

Автор: dream2work 30.3.2012, 10:32

Здравствуйте.
QT у меня собрано статически. Linux.
Собирал cqlcipher как пишет http://wiki.crossplatform.ru/index.php/%D0%9F%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%B0_SQLCipher_%D0%BA_Qt

Цитата
В конце сборки В каталоге ~/qtsdk/qt/plugins/sqldrivers у Вас должен появиться файл libqsqlcipher.so

у меня там появились 'libqsqlcipher.a' 'libqsqlcipher.prl'
они же появились в папке /usr/local/Trolltech/Qt-4.8.0/plugins/sqldrivers
Насколько я понял libqsqlcipher.a - как раз предназначен для статической линковки.
Но как дальше подключить их к проекту т.к. QSqlDatabase::addDatabase("QSQLCIPHER") возвращает ошибку
QSqlDatabase: QSQLCIPHER driver not loaded
QSqlDatabase: available drivers: QSQLITE

Спасибо.

Автор: igor_bogomolov 30.3.2012, 12:51

Цитата(dream2work @ 30.3.2012, 11:32) *
Насколько я понял libqsqlcipher.a - как раз предназначен для статической линковки.
Но как дальше подключить их к проекту
Читайте про http://www.doc.crossplatform.ru/qt/4.7.x/plugins-howto.html#static-plugins

Автор: dream2work 30.3.2012, 13:05

Спасибо. Как раз дошел до статической линковки библиотек.
В main.cpp добавил

 Q_IMPORT_PLUGIN(qsqlcipher)

в .pro
QTPLUGIN += qsqlcipher

Тепер такая ошибка.
:-1: error: cannot find -lqsqlcipher


Цитата
:-1: error: cannot find -lqsqlcipher
File not found:

Автор: dream2work 2.4.2012, 12:08

добавил в pro библиотеку (libsqlcipher.a) и автоматически сгенерировался код:

LIBS += -L/usr/local/Trolltech/Qt-4.8.0/plugins/sqldrivers/ -lqsqlcipher
INCLUDEPATH += /usr/local/Trolltech/Qt-4.8.0/plugins/sqldrivers
DEPENDPATH += /usr/local/Trolltech/Qt-4.8.0/plugins/sqldrivers
PRE_TARGETDEPS += /usr/local/Trolltech/Qt-4.8.0/plugins/sqldrivers/libqsqlcipher.a


теперь следующая ошибка
/home/admin/Documents/test_project/src/main/main.o:-1: In function `global constructors keyed to _Z16myMessageHandler9QtMsgTypePKc':
/home/admin/Documents/test_project/src/main/main.cpp:-1: error: undefined reference to `qt_plugin_instance_qsqlcipher()'

Автор: skozlovf 25.11.2012, 16:54

Недавно тоже понадобилось собрать sqlcipher для qt, но вариант с msys не устраивал. В результате родился cmake скрипт. Оснван на идее domehead100 ( https://groups.google.com/d/msg/sqlcipher/ISwSo2Vq-B8/x205cECTiI0J ).
В результате можно собирать библиотеку sqlcipher, шелл и плагин для qt используя msvc и msys.

В принципе можно рассматривать как альтернативу http://www.wiki.crossplatform.ru/index.php/%D0%9F%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%B0_SQLCipher_%D0%BA_Qt
если, как у меня, не устраивает сборка при помощи mingw.

Тестировал на SQLCipher-2.0.6, sqlite-3.7.14.1, Qt-4.8.3, OpenSSL-1.0.1b
Выложил тут: https://github.com/skozlovf/sqlcipher-cmake

Автор: AlekseyK 25.11.2012, 17:29

Спасибо. :)

Автор: [Matrix] 16.4.2013, 8:19

Необходимо собрать плагин с поддержкой регистронезависимого поиска по русскому языку, собирал sqlcipher 2 версии с ICU 5.1. В приложении Qt выполнение загрузки ICU расширения

"SELECT load_extension('icu.dll');"


завершается ошибкой

"error during initialization:  Unable to fetch row"



Сборка:

./configure --disable-tcl --disable-amalgamation --enable-load-extension CFLAGS="-DSQLITE_ENABLE_ICU -DSQLITE_HAS_CODEC -DSQLITE_ENABLE_FTS4 -DSQLITE_TEMP_STORE=2 -DSQLITE_MAX_ATTACHED=62 -DSQLITE_ENABLE_LOAD_EXTENSION  -I./ext/fts3 -I/c/OpenSSL-Win32/include -L/c/OpenSSL-Win32/lib/MinGW -I./ext/icu -L/C/build/icu/source/lib -I/C/build/icu/source/common -I/C/build/icu/source/i18n" LDFLAGS="-leay32 -licuuc -licuin -licudt"

make

cd ext/icu

gcc -shared icu.c -o icu.dll -DSQLITE_ENABLE_ICU -DSQLITE_HAS_CODEC -DSQLITE_ENABLE_FTS4 -DSQLITE_TEMP_STORE=2 -DSQLITE_MAX_ATTACHED=62 -I./ext/fts3 -I./ext/icu -L/C/build/icu/source/lib -I/C/build/icu/source/common -I/C/build/icu/source/i18n -licuuc -licuin -I../../src -I../../


не могу понять что я делаю не так

Автор: Iron Bug 17.4.2013, 12:12

Цитата([Matrix] @ 16.4.2013, 11:19) *

не могу понять что я делаю не так

по-моему, там ICU линкуется прямо к SQLite и не надо ничего грузить. судя по коду, макрос ENABLE_ICU там включает инициализацию специальных функций для FTS.

Автор: [Matrix] 17.4.2013, 17:37

Если верить консоли (тестировал в линуксе обычную версию), грузить нужно

$ sqlite3 
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> SELECT "ы" LIKE "Ы";
0
sqlite> SELECT icu_load_collation('ru_RU', 'russian');
Error: no such function: icu_load_collation
sqlite> .load ./libsqliteicu.so
sqlite> SELECT icu_load_collation('ru_RU', 'russian');

sqlite> SELECT "ы" LIKE "Ы";
1
sqlite>


Осталось разобраться что делать в винде с sqlcipher'ом

Автор: Iron Bug 18.4.2013, 11:50

тут нет загрузки какого-то расширения. тут только collation выставляется, а это другая команда.
на сайте они пишут, что

Цитата
(18) Case-insensitive matching of Unicode characters does not work.

The default configuration of SQLite only supports case-insensitive comparisons of ASCII characters. The reason for this is that doing full Unicode case-insensitive comparisons and case conversions requires tables and logic that would nearly double the size of the SQLite library. The SQLite developers reason that any application that needs full Unicode case support probably already has the necessary tables and functions and so SQLite should not take up space to duplicate this ability.

Instead of providing full Unicode case support by default, SQLite provides the ability to link against external Unicode comparison and conversion routines. The application can overload the built-in NOCASE collating sequence (using sqlite3_create_collation()) and the built-in like(), upper(), and lower() functions (using sqlite3_create_function()). The SQLite source code includes an "ICU" extension that does these overloads. Or, developers can write their own overloads based on their own Unicode-aware comparison routines already contained within their project.

http://www.sqlite.org/faq.html

если при компиляции указан макрос включения icu, то сам icu намертво прилинкован к sqlite (кстати, там многие опции не существуют, которые у тебя проставлены в строке сборки, но они просто игнорируются).
просто почитай код sqlite, где стоит макрос SQLITE_ENABLE_ICU - там всё понятно.

а что касается cypher'а - вот тут я не знаю: может, ему ещё что-то нужно перегружать. тогда, вероятно, поверх icu он ставит ещё какую-то свою дополнительную библиотеку.
вообще, расширения sqlite - это просто перегрузка некоторых функций. в описании каждого расширения указано, что оно перегружает и как. в любом случае, лучше собирать все библиотеки из сорцов, одним компилятором.

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

у меня дома нет венды, а на работе мало времени на эксперименты. я собрала sqlite с icu без проблем. это работает без всяких дополнений.

Автор: Mish_ka 31.5.2014, 9:43

Уже весь измучился.

Подскажите пожалуйста в чём проблема. Делал всё по инструкциям

MSYS MSYS-1.0.11 (c:\msys\1.0\)

Раскрывающийся текст

g:/Programs/Qt/Tools/mingw482_32 /mingw
g:/Programs/Qt/5.3 /qt
c:/ /c

OpenSSL Win32OpenSSL-1_0_1g (c:\OpenSSL\)
TCLTK tcltk-8.4.1-1 (g:\Programs\Qt\Tools\mingw482_32\)
SQLCipher отсюда https://github.com/sqlcipher/sqlcipher
QT 5.3

Конфигурирую так
Раскрывающийся текст
cd /c/sqlcipher
./configure --prefix=/qt/src/qtbase/src/plugins/sqldrivers/sqlcipher --disable-tcl --disable-amalgamation CFLAGS="-DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2 -I/c/OpenSSL/include /c/OpenSSL/libeay32.dll -L/c/OpenSSL/lib/MinGW" LDFLAGS="-leay32"


выдаёт такую ошибку
Раскрывающийся текст

checking whether to support threadsafe operation... yes
checking for library containing pthread_create... none required
checking for crypto library to use... openssl
checking for HMAC_Init_ex in -lcrypto... no
configure: error: Library crypto not found. Install openssl!"


Третьи сутки бьюсь...

Автор: Iron Bug 2.6.2014, 7:23

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

Автор: Гость_Oleg 9.8.2014, 14:08

Цитата(Гость_Mish_ka_* @ 31.5.2014, 9:43) *
выдаёт такую ошибку:
configure: error: Library crypto not found. Install openssl!"


Я просто закоментировал в файле configure строки, которые сигнализируют об отсутствии OpenSSL.
Эта проверка не нужна, т.к. сборкой DLL'ки у меня занимается MSVC, а не MinGW.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)