Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Использование функции CryptDecryptMessage С КриптоПРО и Випнет
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2013(UTC) Сообщений: 20
Сказал(а) «Спасибо»: 4 раз
|
Здравствуйте. Имеется файл зашифрованный при помощи функции CryptEncryptMessage. Данный файл расшифровывается спокойно VipNet Cryptofile, КриптоАРМ, причем с использованием разных провайдеров. Не желает расшифровывать его только Такском Криптолайн (плохие данные). Есть код расшифровки. Код:
procedure TForm1.Button9Click(Sender: TObject);
var
cbDecryptedMessage : DWORD;
my : HCERTSTORE; //?????????
enctype : cardinal; //?????? ??????
hProv : HCRYPTPROV;
DecryptParams : CRYPT_DECRYPT_MESSAGE_PARA;
DecryptParamsSize : DWORD;
memstr, pStreamOut: TMemoryStream;
MessageSize: DWORD;
MessageOutSize : DWORD;
ppXchgCert : PCCERT_CONTEXT;
MessageArrayOut : PByte;
pSignerCert: PCCERT_CONTEXT;
hProv1: HCRYPTPROV;
pSignerName: PWideChar;
pdwKeySpec : DWORD;
sdf:string;
begin
my := CertOpenSystemStore(0, 'MY');
FillChar(DecryptParams, SizeOf(CRYPT_DECRYPT_MESSAGE_PARA), #0);
DecryptParamsSize := SizeOf(CRYPT_DECRYPT_MESSAGE_PARA);
ZeroMemory( @DecryptParams, SizeOf( CRYPT_DECRYPT_MESSAGE_PARA ));
DecryptParams.cbSize := DecryptParamsSize;
DecryptParams.dwMsgAndCertEncodingType := PKCS_7_ASN_ENCODING or X509_ASN_ENCODING;
DecryptParams.rghCertStore := @my;
DecryptParams.cCertStore := 1;
memstr := TMemoryStream.Create;
memstr.LoadFromFile(spc2);
MessageSize := memstr.Size;
pStreamOut := TMemoryStream.Create;
if not CryptDecryptMessage(
@DecryptParams,
memstr.Memory,
MessageSize,
nil,
@MessageOutSize,
nil)
then
begin
Showmessage('Îøèáêà1: ' + inttostr(getlasterror));
Exit;
end;
pStreamOut.SetSize(MessageOutSize);
//Showmessage(inttostr(MessageOutSize));
//tMem(MessageArrayOut, MessageOutSize);
if not CryptDecryptMessage(
@DecryptParams,
memstr.Memory,
MessageSize,
pStreamOut.Memory,
@MessageOutSize,
nil)
then
begin
Showmessage('Îøèáêà2: ' + inttostr(getlasterror));
Exit;
end
else
begin
pStreamOut.SetSize(MessageOutSize);
pStreamOut.SaveToFile( makeout(spc2));
Showmessage('Ðàñøèôðîâàí');
end;
FreeAndNil(memstr);
FreeAndNil(pStreamOut);
CertCloseStore( my, CERT_CLOSE_STORE_CHECK_FLAG );
spc2:='';
label5.Caption:='';
label5.Refresh;
button9.Enabled:=false;
end;
Такая странность: после второго прогона CryptDecryptMessage - функция, при работе с КриптоПРО 3.6 R3 возвращает ошибку (NTE_BAD_DATA). НО при работе с ViPNet CSP 4 расшифрование происходит нормально. Заметил странность после первого прогона (при ошибке) размер будующего расшифрованного сообщения= истинный размер + 6 байт. Если есть мысли подскажите.
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2013(UTC) Сообщений: 20
Сказал(а) «Спасибо»: 4 раз
|
Простите ошибся. После первого прогона возвращается неправильное количество байт.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Автор: DemDA  Простите ошибся. После первого прогона возвращается неправильное количество байт. Вопрос в чем? Почему код не работает на одном ПК с двумя СКЗИ? |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2013(UTC) Сообщений: 20
Сказал(а) «Спасибо»: 4 раз
|
Не в этом дело. Код работает прекрасно при РАСШИФРОВКЕ с использованием VipNET CSP. При расшифровке с использованием КриптоПРО CSP выскакивает ошибка плохие данные. Такая же ошибка выскакивает при попытке расшифровать файл ПО ТАКСКОМ КРИПТОЛАЙН. КриптоАРМ и Випнет криптофайл расшифровывают нормально. Больше того: код по расшифровке прекрасно работает на другой машине. Неужели дело в том, что два СКЗИ установлены?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Автор: DemDA  Не в этом дело. Код работает прекрасно при РАСШИФРОВКЕ с использованием VipNET CSP. При расшифровке с использованием КриптоПРО CSP выскакивает ошибка плохие данные. Такая же ошибка выскакивает при попытке расшифровать файл ПО ТАКСКОМ КРИПТОЛАЙН. КриптоАРМ и Випнет криптофайл расшифровывают нормально. Больше того: код по расшифровке прекрасно работает на другой машине. Неужели дело в том, что два СКЗИ установлены? |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
в 4х версиях КриптоПРО (не 3.х) и ViPNet - должно работать, проверь. |
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2013(UTC) Сообщений: 20
Сказал(а) «Спасибо»: 4 раз
|
То есть при использовании КриптоПРО 4 и Випнет 4? А почему тогда КриптоАРМ и Випнет Криптофайл расшифровывают? А такском криптолайн нет? И плюс ко всему в випнете ЦСП убрана настройка "Включить поддержку работы через MS CryptoAPI". Но все равно работает.
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2013(UTC) Сообщений: 20
Сказал(а) «Спасибо»: 4 раз
|
Прошу простить за возможно глупые вопросы, но я новичек.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
Автор: DemDA  То есть при использовании КриптоПРО 4 и Випнет 4? А почему тогда КриптоАРМ и Випнет Криптофайл расшифровывают? А такском криптолайн нет? И плюс ко всему в випнете ЦСП убрана настройка "Включить поддержку работы через MS CryptoAPI". Но все равно работает. Этой проблеме уже как 5 лет, с момента выхода ViPNet CSP. Варианты: а) использовать для тестирования разные ПК с одним СКЗИ. б) использовать последние версии. |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
DemDA оставлено 04.08.2015(UTC)
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2013(UTC) Сообщений: 20
Сказал(а) «Спасибо»: 4 раз
|
Андрей, прошу простить. Последний вопрос. Почему все прекрасно работает в случае с Випнет криптофайл и КриптоАРМ. Даже на машине с двумя СКЗИ? И только ТАКСКОМ КРИПТОЛАЙН выдает такую же проблему.
|
|
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Использование функции CryptDecryptMessage С КриптоПРО и Випнет
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close