| ||||
| ||||
НЕ РАБОТАЕТ! т.е. ошибок нет, но и в результате CryptDecrypt не получается исходная строка. В то время как для PROV_RSA_FULL и CALG_RC2 все работает как положено. В чем секрет? #include "stdafx.h" #include <windows.h> #include <wincrypt.h> #include <malloc.h> #include "wincryptex.h" // crypto-PRO header //#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING) #define BUFFER_LEN 2048 int main(int argc, char* argv[]) { HCRYPTPROV hProv; HCRYPTKEY hSessionKey; if (CryptAcquireContext(&hProv, NULL, CP_DEF_PROV,PROV_GOST_DH,0)){ CryptGenKey(hProv, CALG_G28147, CRYPT_EXPORTABLE, &hSessionKey); BYTE *pbData = NULL; pbData = (BYTE*) malloc (BUFFER_LEN); DWORD dwDataLen= 0; strcpy((char *)pbData, "crypt test"); dwDataLen=strlen((char *)pbData); if ( !CryptEncrypt(hSessionKey, 0, // HCRYPTHASH hHash TRUE, // BOOL Final 0, // dwFlags reserved pbData, // in/out &dwDataLen, // in/out BUFFER_LEN) ) printf("\n GetLastError=%x", GetLastError()); else { printf("\n encrypt %s? len=%d", pbData, dwDataLen); if ( !CryptDecrypt(hSessionKey, 0, // HCRYPTHASH hHash TRUE, // BOOL Final 0, // dwFlags reserved pbData, // in/out &dwDataLen)) // in/out printf("\n GetLastError=%x", GetLastError()); else printf("\n decrypt %s? len=%d", pbData, dwDataLen); } } return 0; } | ||||
Ответы: | ||||
| ||||
Посмотрите в примере export.c из примеров (http://www.cryptopro.ru/Cryptopro/test/sample.zip) И здесь по поводу экспорта сессионного ключа по DH. http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=4 | ||||
| ||||
Спасибо, пример очень помог, симметричное шифрование освоил. Теперь проблемы с асимметричными алгоритмами. Хочется зашифровать чужим Public Key так, чтобы расшифровать мог только владелец соответствующего Private Key (без использования Public Key отправителя!). Или так не делают, а нужно обязательно формировать ключ обмена и пользоваться симметричным криптованием? | ||||
| ||||
>Посмотрите в примере export.c из примеров (http://www.cryptopro.ru/CryptoPro/test/sample.zip) Мне тоже интересен этот вопрос, однако, к моему сожалению я не нашел файл sample.zip по указанному Вами адресу. А в том файле sample.zip который есть в разделе примеров, нет файла export.c :(. | ||||
| ||||
Тест по адресу: http://www.cryptopro.ru/CryptoPro/test/sample.zip Действительно export.c там пока нет. На открытых ключах непосредственно не шифруют. Везде делают сессионный ключ и пользуют симметричное шифрование. Вот в RSA сессионный ключ шифруется на открытом. | ||||