Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Библиотека Crypto++  (Прочитано 31387 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vananabu
Интересующийся

ru
Offline Offline

« : 07-05-2011 15:08 » 

Помогите подключить библиотеку Crypto++ к VS. И если есть какая-нибудь документация по работе с ней, поделитесь, пожалуйста.
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 07-05-2011 21:13 » 

Хм, а что её подключать? Если речь об этом Crypto++, то у них не только декларируется совместимость с VS 6.0-2010, но в исходниках даже проект и солюшн для студии есть. А на сайте есть wiki.
Записан
vananabu
Интересующийся

ru
Offline Offline

« Ответ #2 : 08-05-2011 10:00 » 

Просто я в этом новичок. Там целая папка папок Debug, Release, Include, Source.. Пробовал через VS 2010, через параметры, но там написано, что "функция редактирования каталогов через VC++ переведена в категорию нерекомендуемых". Мне нужно только RSA шифрование.
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 08-05-2011 10:39 » 

Не совсем понял, что там не рекомендуется редактировать. Возможно, настраивать глобальные опции для путей, по которым VS ищет заголовки и библиотеки? Или это предупреждение при сборке насчёт каких-то функций, применяемых библиотекой? В последнем случае - давить warning, и всё тут.

Как бы то ни было, проще всего сначала отдельно собрать библиотеку из исходников или взять уже собранное, и использовать в своём проекте готовые .lib-файлы и заголовки. Далее я исхожу из того, что у тебя есть каталоги с .lib-файлами и заголовками.

В своём проекте в настройках собственно проекта прописываешь путь к библиотечным заголовкам, и там же, в Linker Options - имя библиотечного файла и путь к нему. Далее в нужном месте #include <rsa.h>, и всё, в общем-то. VS под рукой нет, чтобы сейчас всё проверить, но проблем быть не должно.

Добавлено через 6 минут и 39 секунд:
Глянул вики - http://www.cryptopp.com/wiki/RSA - там в самом конце даны ссылки на демо-проекты. Я второй посмотрел, там, вроде, всё, что нужно есть (путь к библиотеке прописан как "C:\Crypto++ 5.4") - отладочная версия включается для Debug-сборки, релизная - для релизной. Можно взять за образец.
« Последнее редактирование: 08-05-2011 10:48 от Вад » Записан
vananabu
Интересующийся

ru
Offline Offline

« Ответ #4 : 08-05-2011 13:32 » 

Вроде подключил. всё содержимое include и lib перебросил в соответствующие папки, но во время построения выдает ошибку:

Ошибка   16   error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall CkRsa::CkRsa(void)" (??0CkRsa@@QAE@XZ) в функции "void __cdecl ChilkatSample(void)" (?ChilkatSample@@YAXXZ)   D:\Учеба\Диплом (исходники)\RSA_crypto\RSA_crypto\RSA_crypto.obj   RSA_crypto
И таких 16 ошибок!
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 08-05-2011 18:47 » 

vananabu, непонятно. CkRsa - это чей класс? Вроде, не библиотечный: там я такого ни в rsa.h, ни в документации, ни примерах не видел.
Записан
vananabu
Интересующийся

ru
Offline Offline

« Ответ #6 : 09-05-2011 09:59 » 

Извиняюся, пытался Chilkat подключить. Вернемся к Crypto++. В папку "заголовочные файлы" я бросил файлы с расширением *.h, "исходного кода" - файлы *.cpp. Куда файлы *.sln, *.rc, *.dsp, *.dsw,*.vcproj,*.bdsgroup,*.bdsproj, *.bpf и наконец *.proto? Можно ли как-то просто указать папку и чтобы vs сам скомпилировал библиотеку?
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 09-05-2011 14:00 » 

Погоди, зачем тебе всё это добро у себя? Распаковываешь архив с исходниками, открываешь .sln в Студии отдельно, полностью собираешь в конфигурациях Debug и Release, а потом у себя подключаешь - хотя бы по образцу того проекта, про который я говорил выше, если самостоятельно это сложно сделать.

Ничего никуда копировать при этом не надо, надо просто где-то рядом (например, в каталог со своим проектом) положить ВЕСЬ каталог с исходниками и собранными библиотеками, и указать в настройках своего проекта, где находится это "рядом" (хотя бы так же, как в вышеупомянутом примере).
Записан
vananabu
Интересующийся

ru
Offline Offline

« Ответ #8 : 09-05-2011 15:53 » 

Запустил файл .sln . Он построил 4 проекта: два из них по видимому для того, чтобы протестировать собранную библиотеку, т.к. в их названии присутствует ~test. Два других он назвал cryptdll и cryptlib, я так понимаю статическая и динамическая библиотеки. Что дальше с ними делать? Попробовал построить, выдает целую жменю ошибок, компоновать, те же яйца только в профиль. в общем порядком уже отчаялся и создается впечатление,что это сделать невозможно. Если есть какая-нибудь литература по этому вопросу,посоветуйте, потому что ничего не нашел в интернете?
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 09-05-2011 18:56 » 

vananabu, дальше с ними делать то же самое, что делают в демонстрационных проектах, которых в wiki много. Ты хотя бы один скачал, попробовал собрать, заглянуть в настройки проекта?

Смотреть надо то, каким образом реализуется линковка (связывание) сторонних библиотек в проектах visual studio (и в C++, в целом). Это, на самом деле, очень просто, и это есть и в msdn (например: http://msdn.microsoft.com/en-us/library/ms235627%28v=VS.100%29.aspx), и в учебниках - просто нужно знать, что искать. Искать надо вещи, связанные со статической линковкой и статическими библиотеками.
Записан
vananabu
Интересующийся

ru
Offline Offline

« Ответ #10 : 10-05-2011 07:46 » new

Извините! Моя оплошность) Вчера вечером еще раз пробовал собирать, думал что не получилось. Просто не заглянул в папку. Там теперь есть папки Debug 32 и 64, Release 32 и 64, ну а в них библиотеки.

Добавлено через 5 часов, 25 минут и 41 секунду:
Все вроде сделал как написано (подключил в настройках проекта библиотеки для Release и Debug версий, подключил папку Include, в настройках компоновщика "дополнительные каталоги библиотек" - поставил корневую папку, которая содержит папки Release32, Debug32 и Include, в тексте программы подключил нужные заголовки). Выдает кучу ошибок, хотя во время написания программы видит все методы для класса RSA. Все вот такого содержания:

Ошибка   21   error LNK2001: неразрешенный внешний символ ""public: virtual bool __thiscall CryptoPP::BufferedTransformation::AnyMessages(void)const " (?AnyMessages@BufferedTransformation@CryptoPP@@UBE_NXZ)"   D:\Учеба\Диплом (исходники)\Crypto_fignja\Crypto_fignja\Crypto_fignja.obj   Crypto_fignja
 
« Последнее редактирование: 10-05-2011 13:12 от vananabu » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 10-05-2011 13:39 » 

Скачал себе исходники этой Cryptopp. В последней версии, почему-то, библиотека что в debug, что в release имеет одно и то же имя (хотя в примерах отладочная названа cryptolibd.lib). Ну да ладно.

В общем, я у себя нормально собрал пример, указав:
Additional Include Directories: "<неважно>\cryptopp561
Additional Library Directories: "<неважно>\cryptopp561\Win32\output\debug" и "<неважно>\cryptopp561\Win32\output\release" соответственно.
Линковал cryptolib.lib

Всё собирается, сэмпл отрабатывает

ЗЫ. Собирал в 2005й и 2008й студии, пути могут отличаться.
Ты в Linker->Additional Dependencies  саму библиотеку вписал? (Или хотя бы #pragma comment ( lib, "cryptlib" ))
« Последнее редактирование: 10-05-2011 13:42 от Вад » Записан
vananabu
Интересующийся

ru
Offline Offline

« Ответ #12 : 10-05-2011 14:17 » 

Подключил cryptopp.lib. Пишет, что не хватает cryptopp.dll. Это происходит после успешного построения во время появления окна  для отображения результатов работы программы. Возможно ли что это из-за того, что библиотеки для release и debug одинаково называются?   
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 10-05-2011 15:33 » 

vananabu, так dll должна лежать рядом с exe файлом.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
vananabu
Интересующийся

ru
Offline Offline

« Ответ #14 : 10-05-2011 15:44 » 

Dimka, А какую dll кидать: которая в папке release32 или debug32?

Добавлено через 6 минут и 22 секунды:
Попробовал обе dll по отдельности копировать. Вылетает исключение с надписью нарушение прав доступа при чтении.
« Последнее редактирование: 10-05-2011 15:51 от vananabu » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 10-05-2011 17:07 » 

vananabu, а exe и dll под одну платформу x86 либо x64? Если под разные, то будет исключение. Ну или ошибка в программе.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
vananabu
Интересующийся

ru
Offline Offline

« Ответ #16 : 10-05-2011 19:17 » 

под x86. Опишу подробно как все делал с самого начала:
1. Работаю с готовой скачанной скомпилированной библиотекой.
2. Создаю проект.
3. В свойствах проекта для конфигурации:
- (Debug (активная)) в пункте каталоги VC++: каталоги включения - путь к Include, каталоги библиотек - путь к папке Debug32.
- (Release) то же самое, только папка Release32.
4. Текст программы с официального сайта:
5. Для компоновщика подключение библиотеки - #pragma comment ( lib, "cryptopp" ); Возможно проблема, т.к. для Release и Debug библиотеки называются одинаково - cryptopp.lib?
Код: (C++)
#include <rsa.h>
#include <iostream>
#include <conio.h>
#include <osrng.h>
#pragma comment ( lib, "cryptopp" )

using namespace std;
using namespace CryptoPP;

int main()
{
        //Генерирует параметры для RSA
        AutoSeededRandomPool rng;
        InvertibleRSAFunction params;
    params.GenerateRandomWithKeySize(rng,1024);

        const Integer& n = params.GetModulus();
    const Integer& p = params.GetPrime1();
    const Integer& q = params.GetPrime2();
    const Integer& d = params.GetPrivateExponent();
    const Integer& e = params.GetPublicExponent();

        //Вывод их на экран
        cout << "RSA Parameters:" << endl;
    cout << " n: " << n << endl;
    cout << " p: " << p << endl;
    cout << " q: " << q << endl;
    cout << " d: " << d << endl;
    cout << " e: " << e << endl;
    cout << endl;

        //Генерация ключей по полученным параметрам
        RSA::PrivateKey privateKey(params);
        RSA::PublicKey publicKey(params);

        _getch();
        return 0;
}

Добавлено через 19 минут и 23 секунды:
И как правильно собрать библиотеку? Есть 4 решения:
-cryptest
-cryptlib
-cryptopp
-dlltest
Решение для всех 4 строить или только, например, для cryptlib?
И когда строишь сначала выбирать активной конфигурацию Debug, а потом Release  и для каждой из них делать построение решения?
« Последнее редактирование: 17-05-2011 10:55 от Джон » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 10-05-2011 20:06 » 

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

Я из исходников строил всё целиком, а уже потом разбирался. Но если не хочется тесты собирать, то всё кроме тестов построить. Я не разбирался, что там для чего, честно говоря, и обязательно ли использовать dll, или есть вариант со статической библиотекой.
Записан
vananabu
Интересующийся

ru
Offline Offline

« Ответ #18 : 10-05-2011 20:58 » 

все так. Все равно выдает ошибку. Возможно проблема в VS 2010?

Добавлено через 2 минуты и 2 секунды:
Вы не могли бы передать свою откомпилированную библиотеку? И как проверить, что библиотека работает правильно?

Добавлено через 20 часов, 46 минут и 37 секунд:
Проблема вроде решилась! Установил VS2008 и все нормально, запускаются тестовые программы! Спасибо всем за помощь!
« Последнее редактирование: 11-05-2011 17:46 от vananabu » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 12-05-2011 07:24 » 

Скачал пакет с бинарниками - они и правда какие-то недоделанные, похоже. При линковке ругается на неполноценность библиотеки, приложенные исходники не собираются из-за отсутствия заголовков (+, тестовый проект тоже не находится).
Возьми себе последнюю версию исходников (я собирал 5.61), и попробуй собрать их. Не думаю, что дело в Студии - скорее, авторы кривой пакет выложили.
Записан
vananabu
Интересующийся

ru
Offline Offline

« Ответ #20 : 14-05-2011 16:59 » 

Проблема все-таки была в VS 2010. Т.к. установив VS2008, провел все те же манипуляции, что и с vs2010. Как результат на 08 работают все программы с офф. сайта, на 10 ни одна не работает.. 

Добавлено через 2 дня, 17 часов, 28 минут и 38 секунд:
Проблема все-таки в кривых руках) Наконец-то разобрался! Позже опишу подробно как подключить корректно Crypto++ к VS для таких же как и я)
« Последнее редактирование: 17-05-2011 10:28 от vananabu » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines