| ||||
| ||||
Подобный вопрос уже пробегал на форуме, однако, сколько я не смотрел, не понимаю, в чем ошибка. Код такой (Delphi) var Provider: HCryptProv; ProvVTable: VTableProvStruc; BufferLen: Integer; Buffer: array [0..511] of Byte; OpenKey, SessionKey: HCRYPTKEY; begin ProvVTable.Version := 1; ProvVTable.FuncVerifyImage := nil; ProvVTable.FuncReturnhWnd := nil; if not CPAcquireContext(@Provider, nil, 0, @ProvVTable) then raise ECryptException.Create(’Открытие контейнера ключей для шифрования’, getLastError); //считывем открытый ключ получателя из файла if not GetDataFromFile(dlgOpen, @Buffer, BufferLen) then raise ECryptException.Create(’Открытие файла открытого ключа получателя’, getLastError); //импортируем его if not CPImportKey(Provider, @Buffer, BufferLen, 0, 0, @OpenKey) then raise ECryptException.Create(’Импорт открытого ключа получателя’, getLastError); //создаем ключ сессии if not CPGenKey(Provider, CALG_G28147, CRYPT_EXPORTABLE, @SessionKey) then raise ECryptException.Create(’Создание ключа сессии’, getLastError); //добавляем его в открытый ключ BufferLen := 128; if not CPExportKey(Provider, SessionKey, OpenKey, SIMPLEBLOB, 0, @Buffer, @BufferLen) then raise ECryptException.Create(’Экспорт ключа’, getLastError); И вот на последнем операторе возникает сабж. Что делать, как жить дальше? | ||||
Ответы: | ||||
| ||||
Да, такой вопрос уже был. Повторяем ответ... Экспорт сессионного ключа можно сделать ТОЛЬКО на ключе Деффи-Хелмана. | ||||