Статус: Новичок
Группы: Участники
Зарегистрирован: 21.08.2012(UTC) Сообщений: 7  Откуда: Москва
|
Андрей * написал:Vladimir_K написал: вот что у меня CryptHashData(hash, PByte(memo1.Lines.Text), Length(memo1.Lines.Text), 0) CryptGetHashParam(hash, HP_HASHVAL, nil, dwHashLen,0); GetMem(pbHash, dwHashLen); CryptGetHashParam(Hash,HP_HASHVAL,pbHash, dwHashLen,0) memo2.Lines.add('Hash GOST BASE64 - ' + tobase64(AnsiString(pbHash)));
хм. Может дело в AnsiString? (AnsiString(pbHash) - зачем? полученный хеш -нужно преобразовать побайтно в base64 Прошу прощения, но очень плохо когда не знаешь а еще и забыл. Подскажите пожалуйста как это можно сделать?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.08.2012(UTC) Сообщений: 2 Откуда: Москва
|
День добрый! Подскажите пжл. корректный хэш по ГОСТ Р 34.11-94 в hex и base64 на строку (без кавычек): "Here is some data to sign."
У меня получается в base64: hYXqxZOgcvvn1uLTJScHcIMJiwUZA39xPp1LaRB6kSw=
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,658   Сказал «Спасибо»: 570 раз Поблагодарили: 2293 раз в 1794 постах
|
Sergey_M написал:День добрый! Подскажите пжл. корректный хэш по ГОСТ Р 34.11-94 в hex и base64 на строку (без кавычек): "Here is some data to sign."
У меня получается в base64: hYXqxZOgcvvn1uLTJScHcIMJiwUZA39xPp1LaRB6kSw= по ГОСТ Р 34.11-94 Цитата:Here is some data to sign. , в hex D5CF46C81344F02F58A1B99B1BAEC349F2D5A7AAFA681C99C7B1CE052B055015Другие примеры в разделе "Набор параметров CryptoPro" |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.08.2012(UTC) Сообщений: 7  Откуда: Москва
|
Андрей * написал:
(AnsiString(pbHash) - зачем? полученный хеш -нужно преобразовать побайтно в base64
По-моему какой-то шайтан случился но я получил в base64 то, что у вас от "" было так Цитата: strhash := ''; if CryptGetHashParam(Hash,HP_HASHVAL,pbHash, dwHashLen,0) then begin memo2.Lines.add('Hash GOST - '); for I := 0 to dwHashLen - 1 do begin strhash := strhash + (Format('%2.2x', [Ord(Pansichar(AnsiString(pbHash))[I])])); end; memo2.Lines.add(strhash); memo2.Lines.add('Hash GOST BASE64 - ' + (PAnsiChar(AnsiString(pbHash)))); end;
и получалась всегда разная концовка, да и к тому же длиннее. Сделал так Цитата: strhash := ''; if CryptGetHashParam(Hash,HP_HASHVAL,pbHash, dwHashLen,0) then begin memo2.Lines.add('Hash GOST - '); for I := 0 to dwHashLen - 1 do begin strhash := strhash + (Format('%2.2x', [Ord(Pansichar(AnsiString(pbHash))[I])])); data := data + ansistring(pbhash)[i+1]; end; memo2.Lines.add(strhash); memo2.Lines.add('Hash GOST BASE64 - ' + tobase64(data)); end;
Кто-нибудь пояснит почему i+1 - нумерация с 0 же!?!?!?!? Отредактировано пользователем 29 августа 2012 г. 16:56:51(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,658   Сказал «Спасибо»: 570 раз Поблагодарили: 2293 раз в 1794 постах
|
BinToHex из Classes типа так: Код:
function Get_BinToHex( s:AnsiString ) : AnsiString;
begin
setlength(Result,length(s)*2);
BinToHex( PAnsiChar(s), PAnsiChar(Result), length(s) );
end;
Отредактировано пользователем 29 августа 2012 г. 17:06:40(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 29.08.2012(UTC) Сообщений: 2 Откуда: Москва
|
Андрей * написал:по ГОСТ Р 34.11-94 Цитата:Here is some data to sign. , в hex D5CF46C81344F02F58A1B99B1BAEC349F2D5A7AAFA681C99C7B1CE052B055015 Спасибо. Удалось воспроизвести такойже хэш. В base64 он: 1c9GyBNE8C9YobmbG67DSfLVp6r6aByZx7HOBSsFUBU= PS Юмор в том, что это вроде бы верное значение хэш не совпадает с контрольным примером DigestValue сервиса в СМЭВ (SID0003318, метод VerifyXmlSignature «Проверка подписи в формате XMLDSIG») Кусок контрольного примера: <?xml version="1.0" encoding="utf-8"?> <MyXML Signed="true"> <ElementToSign Signed="true"> Here is some data to sign. </ElementToSign> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" /><DigestValue>laGWSZGexy5krjPI2GvqUZzzhZtsO2oaQC5fWEgyI00=</DigestValue> В hex указанный DigestValue: 95A19649919EC72E64AE33C8D86BEA519CF3859B6C3B6A1A402E5F584832234D Воспользовался онлайн сервисом перевода из base64 в hex: http://tomeko.net/online_tools/base64.php?lang=en Какой для СМЭВ идентификатор параметров хэш: "1.2.643.2.2. 9!1" или "1.2.643.2.2. 301" ?Отредактировано пользователем 29 августа 2012 г. 23:11:50(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 03.09.2012(UTC) Сообщений: 4
|
commander написал:Программа-клиент на Delphi должна отправлять подписанные SOAP запросы к веб-сервисам СМЭВ. Требования к подписи: [Каноникализацию я делаю на основе процедуры из Clever Internet Suite (TclXmlCanonicalizer), а процедура расчета хэша написал такую: Если надо, могу показать функцию каноникализации. Спасибо. Уважаемый коммандер, не подскажите как у Вас успехи с канонкализацией? В данный момент решаю схожую Вашей задачу, уперся в подготовку XML для хеширования.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.08.2012(UTC) Сообщений: 7  Откуда: Москва
|
Продолжаем работать над этим вопросом. Имею вот такую XML ку. Код:<SOAP-ENV:Envelope xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:m0="http://smev.gosuslugi.ru/rev111111" xmlns:m1="http://roszdravnadzor.ru/soap/ServiceLicences" xmlns:m2="http://www.w3.org/2004/08/xop/include" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><wsse:Security SOAP-ENV:actor="http://smev.gosuslugi.ru/actors/smev"><wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="CertId">MIIG............zODM</wsse:BinarySecurityToken><ds:Signature><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:CanonicalizationMethod><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"></ds:SignatureMethod><ds:Reference URI="#body"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"></ds:DigestMethod><ds:DigestValue>vCgDSHq3hcB9bKxsqDxWYCTCSfdqk7CVXPzJ+nkMXTU=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>Lalo6D7sFqxpcoEe8xXHLz+aP+Vms6TCuIFJQe/emrbjk7egdHWLBVZHHpPcn5P6FhPCyvzdz86xiF21GFZN2g==</ds:SignatureValue><ds:KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="#CertId" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"></wsse:Reference></wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature></wsse:Security></SOAP-ENV:Header><SOAP-ENV:Body wsu:Id="body"><m:LicencesRequest_2 xmlns:m="http://roszdravnadzor.ru/soap/ServiceLicences"><m0:Message><m0:Sender><m0:Code>SenderCode</m0:Code><m0:Name>SenderName</m0:Name></m0:Sender><m0:Recipient><m0:Code>ROSZDRAVNADZOR_SYS_1</m0:Code><m0:Name>ROSZDRAVNADZOR_SYS_1</m0:Name></m0:Recipient><m0:TypeCode>GSRV</m0:TypeCode><m0:Status>REQUEST</m0:Status><m0:Date>2001-12-17T09:30:47Z</m0:Date><m0:ExchangeType>2</m0:ExchangeType></m0:Message><m0:MessageData><m0:AppData><m1:Request><m1:INN>5024118963</m1:INN><m1:OGRN>1115024001290</m1:OGRN></m1:Request></m0:AppData></m0:MessageData></m:LicencesRequest_2></SOAP-ENV:Body></SOAP-ENV:Envelope>
Канонизированная и подписанная нашим криптосервером. Пытаюсь получить Хеш по госту от канонизированных данных.Копирую прямо отсюда с ..по.. Код:
<SOAP-ENV:Body wsu:Id="body"><m:LicencesRequest_2 xmlns:m="http://roszdravnadzor.ru/soap/ServiceLicences"><m0:Message><m0:Sender><m0:Code>SenderCode</m0:Code><m0:Name>SenderName</m0:Name></m0:Sender><m0:Recipient><m0:Code>ROSZDRAVNADZOR_SYS_1</m0:Code><m0:Name>ROSZDRAVNADZOR_SYS_1</m0:Name></m0:Recipient><m0:TypeCode>GSRV</m0:TypeCode><m0:Status>REQUEST</m0:Status><m0:Date>2001-12-17T09:30:47Z</m0:Date><m0:ExchangeType>2</m0:ExchangeType></m0:Message><m0:MessageData><m0:AppData><m1:Request><m1:INN>5024118963</m1:INN><m1:OGRN>1115024001290</m1:OGRN></m1:Request></m0:AppData></m0:MessageData></m:LicencesRequest_2></SOAP-ENV:Body>
Получаю Хеши Код:
367A2949776924035919531E04294EF7641AAC3040A5477F95850628F10DB2E3
Hash GOST BASE64 - NnopSXdpJANZGVMeBClO92QarDBApUd/lYUGKPENsuM=
Убираю Код:<SOAP-ENV:Body wsu:Id="body"></SOAP-ENV:Body wsu:Id="body">
Код:<m:LicencesRequest_2 xmlns:m="http://roszdravnadzor.ru/soap/ServiceLicences"><m0:Message><m0:Sender><m0:Code>SenderCode</m0:Code><m0:Name>SenderName</m0:Name></m0:Sender><m0:Recipient><m0:Code>ROSZDRAVNADZOR_SYS_1</m0:Code><m0:Name>ROSZDRAVNADZOR_SYS_1</m0:Name></m0:Recipient><m0:TypeCode>GSRV</m0:TypeCode><m0:Status>REQUEST</m0:Status><m0:Date>2001-12-17T09:30:47Z</m0:Date><m0:ExchangeType>2</m0:ExchangeType></m0:Message><m0:MessageData><m0:AppData><m1:Request><m1:INN>5024118963</m1:INN><m1:OGRN>1115024001290</m1:OGRN></m1:Request></m0:AppData></m0:MessageData></m:LicencesRequest_2>
Получаю Код:
C46C5AE6F509249D40E784E6A3646109BDFE48F815F24901CB18109CA9ED0EFD
Hash GOST BASE64 - xGxa5vUJJJ1A54Tmo2RhCb3+SPgV8kkByxgQnKntDv0=
А надо получить как я понимаю vCgDSHq3hcB9bKxsqDxWYCTCSfdqk7CVXPzJ+nkMXTU=И в Hex он будет видимо такой BC2803487AB785C07D6CAC6CA83C566024C249F76A93B0955CFCC9FA790C5D35 Перепробовал, как мне кажется, все варианты Подскажите пожалуйста от чего надо считать хеш. Файл в кодировке UTF-8.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.03.2011(UTC) Сообщений: 28  Откуда: Екатеринбург Сказал «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Vladimir_K написал: Подскажите пожалуйста от чего надо считать хеш.
От канонической формы SignedInfo для проверки подписи, и от канонической формы тега, на которые есть References в SignedInfo. В Вашем случае от тега SOAP-ENV:Body. Каноникализация должна производиться алгоритмом http://www.w3.org/2001/10/xml-exc-c14n#.Переводы строк, пробелы, табуляции... имеют значение, вы должны их сохранить как они имели место быть в момент подписания. Обратите внимание на символы концов строк. Алгоритм http://www.w3.org/2001/10/xml-exc-c14n# завершает строки символом 0x0A. В Windows конец строки это пара символов 0x0D, 0x0A. Ваша каноническая форма должна совпадать с канонической формой СМЭВа с точностью до байта, иначе хеши не сойдутся. Каноническая форма у Вас кривая. Что такое префиксы m0, m1, wsu? Почему их нет в атрибутах SOAP-ENV:Body? Отредактировано пользователем 4 сентября 2012 г. 12:22:14(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 03.09.2012(UTC) Сообщений: 4
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close