Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline aleksey.gallyamov  
#11 Оставлено : 28 марта 2014 г. 15:09:05(UTC)
aleksey.gallyamov

Статус: Участник

Группы: Участники
Зарегистрирован: 22.01.2014(UTC)
Сообщений: 16
Российская Федерация
Откуда: Сургут

Сказал(а) «Спасибо»: 1 раз
Юрий, вы говорили, что примеров очень много на MSDN, я не могу найти примера шифрования файла через CryptMsgOpenToEncode, в PKCS#7, с вложением туда зашифрованных данных, сессионного ключа, вектора инициализации и сертификата (публичного) ключа получателя. Может есть ещё какой-то MSDN, о котором я не знаю, где есть пример с подобной операцией?
Offline Юрий  
#12 Оставлено : 28 марта 2014 г. 15:15:50(UTC)
Юрий

Статус: Активный участник

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 675
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 95 раз в 68 постах
Автор: aleksey.gallyamov Перейти к цитате
Юрий, вы говорили, что примеров очень много на MSDN, я не могу найти примера шифрования файла через CryptMsgOpenToEncode, в PKCS#7, с вложением туда зашифрованных данных, сессионного ключа, вектора инициализации и сертификата (публичного) ключа получателя. Может есть ещё какой-то MSDN, о котором я не знаю, где есть пример с подобной операцией?

Открою страшную тайну: есть ещё такой сервис как Google если уж на MSDN найти трудно.
С уважением,
Юрий Строжевский
Offline aleksey.gallyamov  
#13 Оставлено : 28 марта 2014 г. 15:20:19(UTC)
aleksey.gallyamov

Статус: Участник

Группы: Участники
Зарегистрирован: 22.01.2014(UTC)
Сообщений: 16
Российская Федерация
Откуда: Сургут

Сказал(а) «Спасибо»: 1 раз
Автор: Юрий Перейти к цитате
Открою страшную тайну: есть ещё такой сервис как Google если уж на MSDN найти трудно.


Такое ощущение, что информацией по этой теме намеренно не деляться, видимо страшная тайна.
Ладно, большое спасибо за попытку помочь, буду дальше разбираться.
Offline aleksey.gallyamov  
#14 Оставлено : 28 марта 2014 г. 16:20:48(UTC)
aleksey.gallyamov

Статус: Участник

Группы: Участники
Зарегистрирован: 22.01.2014(UTC)
Сообщений: 16
Российская Федерация
Откуда: Сургут

Сказал(а) «Спасибо»: 1 раз
Код:

			HCRYPTPROV hCryptProv = NULL;
			if (!CryptAcquireContext(&hCryptProv, "SENDER", CP_GR3410_2001_PROV, PROV_GOST_2001_DH, 0))
			{
				SetError("CryptAcquireContext");
				return false;
			}

			CMSG_ENVELOPED_ENCODE_INFO eInfo = { sizeof(eInfo) };
			eInfo.hCryptProv = hCryptProv;

			eInfo.ContentEncryptionAlgorithm.pszObjId = szOID_CP_GOST_28147;
			eInfo.pvEncryptionAuxInfo = NULL;

			// указатель на контекст сертификата
			auto pCertContext = reinterpret_cast<PCCERT_CONTEXT>(recipientCertificate->Handle.ToPointer());
			PCERT_INFO pCertInfo = pCertContext->pCertInfo;

			eInfo.cRecipients = 1;
			eInfo.rgpRecipients = &pCertInfo;

			HCRYPTMSG hMsg = CryptMsgOpenToEncode(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
				0, CMSG_ENVELOPED, &eInfo, NULL, NULL);

			if (!hMsg)
			{
				SetError("CryptMsgOpenToEncode");
				return false;
			}

			auto buffer = gcnew array<byte>(inputStream->Length);
			inputStream->Read(buffer, 0, inputStream->Length);
			pin_ptr<byte> pBuffer = &(buffer[0]);

			if (!CryptMsgUpdate(hMsg, pBuffer, buffer->Length, true))
			{
				SetError("CryptMsgUpdate");
				CryptMsgClose(hMsg);
				return false;
			}

			DWORD cbData;

			if (!CryptMsgGetParam(hMsg, CMSG_CONTENT_PARAM, 0, NULL, &cbData))
			{
				SetError("CryptMsgGetParam(CMSG_CONTENT_PARAM)'0");
				CryptMsgClose(hMsg);
				return false;
			}

			auto outputBuffer = gcnew array<byte>(cbData);
			pin_ptr<byte> pbData = &(outputBuffer[0]);

			if (!CryptMsgGetParam(hMsg, CMSG_CONTENT_PARAM, 0, pbData, &cbData))
			{
				SetError("CryptMsgGetParam(CMSG_CONTENT_PARAM)'1");
				CryptMsgClose(hMsg);
				return false;
			}

			outputStream->Write(outputBuffer, 0, outputBuffer->Length);
			outputStream->Flush();

			CryptMsgClose(hMsg);


Получаю зашифрованное сообщение, но закрытый ключ отправителя не используется, как в указанном примере, так как не появляется окно для ввода ПИН. Почему? Как сделать правильно?
Offline Андрей Писарев  
#15 Оставлено : 29 марта 2014 г. 11:29:00(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,190
Мужчина
Российская Федерация

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
Цитата:
Получаю зашифрованное сообщение, но закрытый ключ отправителя не используется, как в указанном примере, так как не появляется окно для ввода ПИН. Почему? Как сделать правильно?


Потому что он не используется, т.к. не нужен...
Техническую поддержку оказываем тут
Наша база знаний
Offline Kirill Sobolev  
#16 Оставлено : 31 марта 2014 г. 10:18:44(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
Юрий, вы говорили, что примеров очень много на MSDN, я не могу найти примера шифрования файла через CryptMsgOpenToEncode, в PKCS#7, с вложением туда зашифрованных данных, сессионного ключа, вектора инициализации и сертификата (публичного) ключа получателя. Может есть ещё какой-то MSDN, о котором я не знаю, где есть пример с подобной операцией?

Вы, наверное, шутите про другой MSDN.
CryptMsgOpenToEncode function
Цитата:

Examples
For examples that use this function, see Example C Program: Signing, Encoding, Decoding, and Verifying a Message, Alternate Code for Encoding an Enveloped Message, Example C Program: Encoding an Enveloped, Signed Message, and Example C Program: Encoding and Decoding a Hashed Message.
Техническую поддержку оказываем тут
Наша база знаний
Offline aleksey.gallyamov  
#17 Оставлено : 31 марта 2014 г. 11:57:33(UTC)
aleksey.gallyamov

Статус: Участник

Группы: Участники
Зарегистрирован: 22.01.2014(UTC)
Сообщений: 16
Российская Федерация
Откуда: Сургут

Сказал(а) «Спасибо»: 1 раз
Автор: Kirill Sobolev Перейти к цитате
Вы, наверное, шутите про другой MSDN.


Я искал возможность упаковать уже зашифрованные данные вместе с "обвязкой". В примерах на MSDN есть только упаковка с одновременным шифрованием, который ко всему прочему не шифрует сессионный ключ, ключём согласования с использованием открытого ключа получателя и ключа отправителя (только открытым ключём получателя). Ну да ладно, для начала и так сойдёт.

И на MSDN вообще нет примеров использования CryptMsgOpenToDecode, хотя алгоритм и описания использования есть. Пока что именно провайдер Крипто Про 3.9 стабильно выдаёт ошибку при попытке декодировать/дешифровать: ASN.1 tag bad value. При чём не важно используется ли CryptMsgOpenToDecode или упрощённые функции.
Offline Максим Коллегин  
#18 Оставлено : 31 марта 2014 г. 12:34:32(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,457
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 750 раз в 645 постах
Сформировать сообщение вручную будет достаточно сложно и апи для этого не попадалось. Стандартов для pkcs7 с использованием ключа отправителя тоже не припомню, но вполне можно его использовать вместе эфемеральной пары, только зачем? Попробуйте все-таки шифрование в поточном режиме (-1) в качестве длины.
Знания в базе знаний, поддержка в центре поддержки
Offline Максим Коллегин  
#19 Оставлено : 31 марта 2014 г. 12:38:05(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,457
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 750 раз в 645 постах
Вот пример поточной подписи, с шифрованием аналогично:
http://cpdn.cryptopro.ru...73-98f9-f6824e549fa4.htm
Знания в базе знаний, поддержка в центре поддержки
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.