Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2012, 20:51   #1
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Здравствуйте.
Приспичило мне из полученного бинарника после base64 сделать обычный txt файл содержащий подобие сертификата. Н-р:
Код:
-----BEGIN CERTIFICATE-----
MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
IDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2VydmVy
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVow
XzELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQL
EyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUA
A4GJADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII0haGN1Xp
sSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphIuR2nKRoTLkoRWZweFdVJ
VCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZIhvcNAQECBQADfgBl3X7hsuyw4jrg7HFG
mhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2
qUtN8iD3zV9/ZHuO3ABc1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
-----END CERTIFICATE-----

Подскажите, пожалуйста, какой библиотекой openssl это возможно сделать. Буду очень благодарен.

Ну вот что у меня пока получилось.
Криптовка
На входе:
confbuf2 - бинарный буфер с информацией
confbuf3 - буфер для данных
Код:
		EVP_CIPHER_CTX ctx;
		EVP_CIPHER_CTX_init(&ctx);

		EVP_EncryptInit_ex(&ctx, EVP_des_ecb(), NULL, (const unsigned char*)md5_key, iv);
		int outl;
		int hr = EVP_EncryptUpdate(&ctx, (unsigned char*)confbuf3, &outl, (const unsigned char*)confbuf2, b2step);
		int tempsize = outl;
		EVP_EncryptFinal_ex(&ctx, (unsigned char*)confbuf3 + outl, &outl);
		tempsize += outl;

		BIO *bmem, *b64;
		BUF_MEM *bptr;

		b64 = BIO_new(BIO_f_base64());
		bmem = BIO_new(BIO_s_mem());
		b64 = BIO_push(b64, bmem);
		BIO_write(b64, confbuf3, tempsize);
		BIO_flush(b64);
		BIO_get_mem_ptr(b64, &bptr);
		fl = fopen("./1.txt", "w+b");
		fwrite(bptr->data, bptr->length-1, 1, fl);
		fclose(fl);
		BIO_free_all(b64);
На выходе в tempsize размер криптованного буфера.
bptr->length-1 - вычитаем 1, т.к. записывается переход на след. строку.
В файле 1.txt получается следующее:

vYtUtxBCrv29O9k+hXjLrm9+qLnquOZo6zE pMt1NIa/1PubPtfFRxF0u09nUnPeS
AtBuGIhzH5VR/2xaHAmbFodFjFyKncbr8ED36T+d1TYno1sa 8hi5xYqEI
3E/YFgzUSwHqB80STKmgVYv6hzj1FVd9Z5WvPC 5WZT0rYIJmhMzMWs3NI1BtFGIe
/usxBprj4OlEGdJ/ONLCU9NyfMKxtnnUPksBt6T1i0/xOC+dlOrURqEewgWEg6x/
HkuzOQhn7es4Amvq8yk1DdnY74qn5Z/AmIYRO9W31Yl3ZO0r6SwGYQPiAKQ5Qdu/
Y8bz5XcOONj9OYgSvq3aLHRr7p3EPV2uS2R PAMImVsSpahZKe10UtRPFXpZJaqYw
i75m+c6HOxTb1NCJeTw4Lf3VLAhxYwUV007 tH/Uh502VGtM4x4HmDNoOJcqqpbej
hTW5+sqwS0CCiFhYQGUtblsHkfkCyO+MXoh PckvaehQwh+USUOxMe9
SlYaanquI8Wk/ivu1CEZeNkiAG200iiVpPXXPYy28kHwWaRs GXEBUe5sE1nCvbcJ
Vh+mO4tFnGxO4yq0gqjFZIjQQ70gAjwOY3C 7pQEMkh+Hxe2MNAMAv96dCBsxkNsX
GUMjrjAdsNQ3xFDS9m4QLtIfw2NMN03xmVu laBTtS1Nc4xQHUbpgq7aaCfh3EYhc
3yet7l5/E2RczDbWxpsA8f/krDmWSJHdOLykeAg71/aV4LG0XC6kMA==


Но нет заголовка вида: -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----

Декриптовка:
На входе:
confbuf2 - криптованный буфер
confbuf - декриптованный буфер.

Код:
		BIO *b64, *bmem;
		b64 = BIO_new(BIO_f_base64());
		bmem = BIO_new_mem_buf(confbuf2, size);
		bmem = BIO_push(b64, bmem);
		int size2 = BIO_read(bmem, confbuf, size);
		ZeroMemory(confbuf2, size);
		size = size2;
		BIO_free_all(bmem);

		EVP_CIPHER_CTX ctx;
		EVP_CIPHER_CTX_init(&ctx);
		EVP_DecryptInit_ex(&ctx, EVP_des_ecb(), NULL, (const unsigned char*)md5_key, iv);
		int outl;
		EVP_DecryptUpdate(&ctx, (unsigned char*)confbuf2, &outl, (const unsigned char*)confbuf, size);
		size = outl;
		EVP_DecryptFinal_ex(&ctx, (unsigned char*)confbuf2 + outl, &outl);
		size += outl;
На выходе:
size - размер буфера
confbuf - содержит декриптованные данные.

Последний раз редактировалось Stilet; 06.10.2012 в 15:18.
Tahoma вне форума Ответить с цитированием
Старый 06.10.2012, 15:19   #2
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Ну все. BEGIN и END решил добавить вручную. Тему можно закрывать.
Tahoma вне форума Ответить с цитированием
Старый 06.10.2012, 17:57   #3
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от Tahoma Посмотреть сообщение
Ну все. BEGIN и END решил добавить вручную. Тему можно закрывать.
так их и надо добавлять вручную

Ну и встречный вопрос: может есть толковые доки по openssl ? В частности интересует как проверяется цифровая подпись PKCS7
counter вне форума Ответить с цитированием
Старый 06.10.2012, 18:41   #4
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
Ну и встречный вопрос: может есть толковые доки по openssl ? В частности интересует как проверяется цифровая подпись PKCS7
Доки не находил, только вопросы на форумах. Но натолкнулся на такую ссылку: http://www.openssl.org/docs/crypto/
Непосредственно по вопросу: http://www.openssl.org/docs/crypto/PKCS7_verify.html
Tahoma вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Synapse + OpenSSL + HTTPS - проверка сертификата STRELOK-2007 Работа с сетью в Delphi 6 10.11.2011 06:11
Немогу установить OpenSSl 0.9.7b L11L Софт 1 19.07.2010 20:14
Комплексный вопрос на тему авторизации на сайте и подтверждению сертификата Anatol_rus Работа с сетью в Delphi 13 15.10.2009 15:44
Вопрос по авторизации,подтверждению сертификата и получению ответов на свои запросы Anatol_rus Работа с сетью в Delphi 5 12.10.2009 17:17
OpenSSL помогите разобраться Thunderstorm Работа с сетью в Delphi 0 11.07.2008 10:37