Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > [bcb2009] Crypto++ 5.5.2


Автор: MuForum 13.1.2009, 00:04
Доброе время суток!
- Работаю на 'CodeGear™ C++Builder® 2009  Version 12.0.3210.17555' (SP1).
- Столкнулся со следующей проблемой, мне необходимо осуществить шифровку основного трафика при помощи алгоритма http://ru.wikipedia.org/wiki/Advanced_Encryption_Standard, проверку на аутентификацию делать при помощи http://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C, выбрал алгоритм для этого http://ru.wikipedia.org/wiki/RSA.
- Если AES ещё кое как смог реализовать (криво/косо), то во втором случае плаваю ###...
- Решил выбрать бесплатный пакет http://www.cryptopp.com/ версии '5.2.2', но при попытке скомпилировать проект вылетает ошибка на этом куске кода: (queue.h)
Код

NAMESPACE_BEGIN(std)
template<> inline void swap(CryptoPP::ByteQueue &a, CryptoPP::ByteQueue &b)
{
    a.swap(b);
}
NAMESPACE_END
...
[BCC32 Fatal Error] queue.h(136): F1004 Internal compiler error at 0x47fbe63 with base 0x47b0000

- Поиск в google ничего не дал, даже на офф.форуме посоветовали только переставить студию. (Что естественно не помогло)
- Как можно решить или выйти из этой ситуации?



# Добавлено: Есть ещё библиотека http://openssl.org/, но к сожалению тут тоже не без чудес =(

Автор: Alca 13.1.2009, 10:43
Попробуй в студии скомпилить.

Автор: MuForum 13.1.2009, 13:58
#2, Alca - Не понимаю, к чему это было сказано?
- Crypto++ - это библиотека с готовыми алгоритмами, это не .dll!

Автор: Alca 13.1.2009, 14:04
Выложи проект с этой либой, попробую у себя поюзать.
P.S. 
Цитата

9/24/2007 - Version 5.5.2 released 
ported x64 assembly language code for AES, Salsa20, Sosemanuk, and Panama to MSVC 2005 (using MASM since MSVC doesn't support inline assembly on x64) 
fixed Salsa20 initialization crash on non-SSE2 machines 
fixed Whirlpool crash on Pentium 2 machines 
fixed possible branch prediction analysis (BPA) vulnerability in MontgomeryReduce(), which may affect security of RSA, RW, LUC 
fixed link error with MSVC 2003 when using "debug DLL" form of runtime library 
fixed crash in SSE2_Add on P4 machines when compiled with MSVC 6.0 SP5 with Processor Pack 
added support for newly released compilers: MSVC 2008, GCC 4.2, Sun CC 5.9, Intel C++ Compiler 10.0, and Borland C++Builder 2007

Цитата

Crypto++: a C++ Class Library of Cryptographic Schemes
Version 5.5.2 (9/24/2007)
...
The following compilers are supported for this release. Please visit
http://www.cryptopp.com the most up to date build instructions and porting notes.
  * MSVC 6.0 - 2008
  * GCC 3.3 - 4.2
  * Borland C++Builder 2006 - 2007
  * Intel C++ Compiler 9.1 - 10.0
  * Sun Studio 11 - 12 (CC 5.8 - 5.9)

А чё есть либа под C++Builder 2009? 
Поддерживается вроде только 2007, если 5.5.2 это конечно последний релиз.

Автор: MuForum 13.1.2009, 14:21
#4, Alca - http://www.cryptopp.com/cryptopp552.zip на данный момент является самой последней версией данного продукта.


P.S. -> Проблема в том, что мне нужно сделать проект именно под BCB 2009 =(
- Эх, как было хорошо на 6...

Автор: Alca 13.1.2009, 14:29
А на шестерке 2006 или 2007 копилиться?

Автор: MuForum 13.1.2009, 14:30
Цитата(Alca @ 13.1.2009,  14:29)
А на шестерке копилиться?

Не пробовал, так как снёс.
- Работать на 6 не могу, условия были только на 2009 =(
- Вот и бьюсь головой АП Стену....

Автор: Alca 13.1.2009, 14:32
А ты им втыкни что написано в Readme.txt. smile 
Я бы сначала попробывал на 2007, если бы заработало, то можно было бы плясать дальше.
Или попробуй OpenSSL.

Автор: MuForum 13.1.2009, 14:42
#8, Alca - Да к сожалению я что-то не могу разобраться с этой библиотекой 'OpenSSL'.
- Не могу понять как использовать. (Google особо не помог в этом)

Автор: Alca 13.1.2009, 14:53
Подключаешь нужные хидера и смотришь как описаны нужные тебе функции.
Потом их юзаешь.
К примеру так : 
Код

#include "rsa\rsa.h" 
#include "aes\aes.h"
//....

Автор: vikaz 13.1.2009, 15:31
MuForum, а ты не хочешь попробовать использовать CryptoAPI?
В нем есть все, что тебе нужно, как мне кажется. 
Ты какую длину ключа хочешь использовать использовать?

Автор: MuForum 13.1.2009, 15:59
Цитата(vikaz @ 13.1.2009,  15:31)
MuForum, а ты не хочешь попробовать использовать CryptoAPI?
В нем есть все, что тебе нужно, как мне кажется. 
Ты какую длину ключа хочешь использовать использовать?

Длину ключа 256 бит.
- не хочется привязываться к системе...

Автор: MuForum 13.1.2009, 22:50
Цитата(Alca @ 13.1.2009,  14:53)
Подключаешь нужные хидера и смотришь как описаны нужные тебе функции.
Потом их юзаешь.
К примеру так : 
Код

#include "rsa\rsa.h" 
#include "aes\aes.h"
//....

- Это понятно, но проблема в другом, в этом файле не сделано всё в классе, а сделано разбросано без класса, и когда я пытаюсь вызвать функцию, мне компилятор выдаёт следующее:
Код

[ILINK32 Error] Error: Unresolved external '_AES_set_encrypt_key' referenced from C:\...\RAD STUDIO\PROJECTS\ENCRYPTING_TRAFFIC\DEBUG\FMAIN.OBJ


вызываю следующим образом:
Код

::AES_set_encrypt_key(Key, 128, 0);

Автор: Romikgy 14.1.2009, 00:04
видать пространство имен не обозначено

Автор: vikaz 14.1.2009, 07:35
Цитата(MuForum @ 13.1.2009,  15:59)
Длину ключа 256 бит.
- не хочется привязываться к системе...

немного не понял. Ты что разрабатываешь кросс-платформенную программу?
Если да, то тогда вопросы отпадают.
А если нет!!!!!
Зачем таскать с собой библиотеки, если все это есть в системе, тем более, что длина ключа всего 256 бит....
Зато ты с легкостью сможешь сменить при необходимости алгоритм, без глобальной переписки кода.
Я просто сам разрабатываю программу, которая будет шифровать трафик, лично я остановился на CryptoAPI. smile

 

Автор: Alca 14.1.2009, 10:09
vikaz, можешь исходники засветить?

Автор: vikaz 14.1.2009, 10:16
Легко.
Только там нет комментариев, извините, так получилось.

Автор: MuForum 14.1.2009, 13:06
Цитата(vikaz @ 14.1.2009,  10:16)
Легко.
Только там нет комментариев, извините, так получилось.

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

Автор: vikaz 14.1.2009, 13:21
У тебя видимо не пользователи, а хакеры какие-то. Ну во-первых, я не знаю, что у тебя за программа и какие функции ты на нее возлагаешь. Если шифровать трафик, то пусть меняют. Сервер/клиент просто отошьет этот пакет и все, так как не сможет его расшифровать.  

Автор: ksili 19.1.2009, 06:56
vikaz, хочу тебя спросить. Во всех примерах с CryptoAPI, в том числе и у тебя, использутся криптопровайдер PROV_RSA_FULL. 

1) Это так потому, что он всегда присутстсвует в системе? Или когда-то может и отсутствовать?

2) Если мне нужно использовать не RSA или AES, а например 3DES, может ли это делать этот криптопровайдер?

Автор: vikaz 21.1.2009, 07:13
ksili конечно можно. ТО что в примере используется RSA, это просто для примера, вот какие алгоритмы шифрования идут вместе с операционной системой:

Стандартные криптопровайдеры и алгоритмы
CryptoAPI предоставляет следующие стандартные криптопровайдеры: 
•    Microsoft Base Cryptographic Provider
•    Microsoft Strong Cryptographic Provider
•    Microsoft Enhanced Cryptographic Provider
•    Microsoft AES Cryptographic Provider
•    Microsoft DSS Cryptographic Provider 
•    Microsoft Base DSS and Diffie-Hellman Cryptographic Provider 
•    Microsoft DSS and Diffie-Hellman/Schannel Cryptographic Provider 
•    Microsoft RSA/Schannel Cryptographic Provider 

Все эти CSP отличаются друг от друга своими типами, которые определяются набором параметров, включающим:
•    алгоритм обмена сессионным (симметричным) ключом.
•    алгоритм вычисление цифровой подписи
•    формат цифровой подписи
•    схема генерирования сессионного ключа по хешу
•    длина ключа

В CryptoAPI имеется такое понятие, как алгоритм шифрования, и многие алгоритмы поддерживают сразу несколько длин ключей. Длины ключей RSA алгоритмов вычисления цифровой подписи и обмена ключами могут варьироваться от 384 до 16384 бит с интервалом в 8 бит. Также поддерживаются алгоритмы шифрования AES (128, 192, 256) и вычисления хешей MD2, MD5, SHA, MAC, MAC. 

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