Atom Лента - Форум КриптоПро - Тема:CAdESCOM возвращает неправильную подпись в формате Base64 - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:CAdESCOMvozvrashchaetnepravil'nujupodpis'vformateBase64-10:1Copyright 2024 Форум КриптоПро2024-03-29T03:39:15Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.rutwo_oceanshttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=36490&name=two_oceanstwo_oceanshttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=36490&name=two_oceanssergei100https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=54197&name=sergei100sergei100https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=54197&name=sergei100Андрей *https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=15008&name=Андрей *Андрей *https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=15008&name=Андрей *two_oceanshttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=36490&name=two_oceanssergei100https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=54197&name=sergei100two_oceanshttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=36490&name=two_oceanssergei100https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=54197&name=sergei100sergei100https://www.cryptopro.ru/forum2/default.aspx?g=profile&u=54197&name=sergei100YetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid107607:1CAdESCOM возвращает неправильную подпись в формате Base64<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: sergei100 <a href="/forum2/default.aspx?g=posts&m=107599#post107599"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Да и по поводу bDetached, -1 получается = true ?</div></div>Тут возможна разница из-за того как разные языки программирования и среды программирования представляют логический тип в двоичном виде. Почти наверняка СОМ объекты написаны на языке родственном Си, а язык 1с родственнен VisualBasic.<br /><br />Для VisualBasic и его диалектов, все верно -1 = true. Вернее 0 = False (как передается наружу, так и принимется извне), все остальные двоичные значения логического типа принимаемые извне VisualBasic считает True, но сам VisualBasic передает наружу -1 (минус единицу) как True. Другие языки могут аналогично считать 0 = False, все остальное True, но при этом передавать наружу 1 (единицу) как True (это поведение языков семейства Pascal). Оба поведения совместимы за счет восприятия всех прочих значений как True. Так просто удобнее воспринимать при компиляции в машинный код за счет отдельного флага процессора для результата равного ноль. Для получения 0, 1, -1 со времен intel 80386 есть специальные быстрые инструкции процессора (xor a,a = 0; инвертирование бит от 0 = -1; inc от 0 = 1).<br /><br />Проблемы начинаются если тип не точно логический, а, например, включает значение "неизвестно" как третий вариант кроме True и False. Там уже надо типом перечислением вводить точные значения.</td></tr></table>2019-10-03T05:31:01+03:002019-10-03T05:31:01+03:00two_oceans<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: sergei100 <a href="/forum2/default.aspx?g=posts&m=107599#post107599"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Да и по поводу bDetached, -1 получается = true ?</div></div>Тут возможна разница из-за того как разные языки программирования и среды программирования представляют логический тип в двоичном виде. Почти наверняка СОМ объекты написаны на языке родственном Си, а язык 1с родственнен VisualBasic.<br /><br />Для VisualBasic и его диалектов, все верно -1 = true. Вернее 0 = False (как передается наружу, так и принимется извне), все остальные двоичные значения логического типа принимаемые извне VisualBasic считает True, но сам VisualBasic передает наружу -1 (минус единицу) как True. Другие языки могут аналогично считать 0 = False, все остальное True, но при этом передавать наружу 1 (единицу) как True (это поведение языков семейства Pascal). Оба поведения совместимы за счет восприятия всех прочих значений как True. Так просто удобнее воспринимать при компиляции в машинный код за счет отдельного флага процессора для результата равного ноль. Для получения 0, 1, -1 со времен intel 80386 есть специальные быстрые инструкции процессора (xor a,a = 0; инвертирование бит от 0 = -1; inc от 0 = 1).<br /><br />Проблемы начинаются если тип не точно логический, а, например, включает значение "неизвестно" как третий вариант кроме True и False. Там уже надо типом перечислением вводить точные значения.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid107599:1CAdESCOM возвращает неправильную подпись в формате Base64<table class="content postContainer" width="100%"><tr><td>Да и по поводу bDetached, -1 получается = true ?</td></tr></table>2019-10-02T13:57:51+03:002019-10-02T13:57:51+03:00sergei100<table class="content postContainer" width="100%"><tr><td>Да и по поводу bDetached, -1 получается = true ?</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid107597:1CAdESCOM возвращает неправильную подпись в формате Base64<table class="content postContainer_Alt" width="100%"><tr><td>Ну да все правильно Options = 2(CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY). Сразу и количество символов в строке уменьшилось с 7 286 на 4 508.<br />Всем спасибо за участие! </td></tr></table>2019-10-02T13:18:32+03:002019-10-02T13:18:32+03:00sergei100<table class="content postContainer_Alt" width="100%"><tr><td>Ну да все правильно Options = 2(CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY). Сразу и количество символов в строке уменьшилось с 7 286 на 4 508.<br />Всем спасибо за участие! </td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid107595:1CAdESCOM возвращает неправильную подпись в формате Base64<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: sergei100 <a href="/forum2/default.aspx?g=posts&m=107589#post107589"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Вот так работает:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-vb">
Функция ПодписатьCAdES(ТекстДляПодписи, ComОбъектСертификата)
CADESCOM_CADES_TYPE = 1;
bDetached = 1;
EncodingType = 0;
oSigner = Новый COMОбъект("CAdESCOM.CPSigner"); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.
oSigner.Certificate = ComОбъектСертификата;
oSigner.Options = 2;
oSigner.KeyPin = "ПарольОтУКЭП";
oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData"); // Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью.
oSignedData.ContentEncoding = 1;
oSignedData.Content = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ТекстДляПодписи));
sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType); // Метод добавляет к сообщению усовершенствованную подпись.
Возврат УбратьСимволы10_13(sSignedMessage); // Подпись в формате Base64
КонецФункции</code></pre>
</div></div><br /><br />После того как подставил oSigner.Options = 2; все заработало. </div></div><br /><br />Чтобы читабельнее было...<br /><br /></td></tr></table>2019-10-02T13:13:10+03:002019-10-02T13:13:10+03:00Андрей *<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: sergei100 <a href="/forum2/default.aspx?g=posts&m=107589#post107589"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Вот так работает:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-vb">
Функция ПодписатьCAdES(ТекстДляПодписи, ComОбъектСертификата)
CADESCOM_CADES_TYPE = 1;
bDetached = 1;
EncodingType = 0;
oSigner = Новый COMОбъект("CAdESCOM.CPSigner"); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.
oSigner.Certificate = ComОбъектСертификата;
oSigner.Options = 2;
oSigner.KeyPin = "ПарольОтУКЭП";
oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData"); // Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью.
oSignedData.ContentEncoding = 1;
oSignedData.Content = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ТекстДляПодписи));
sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType); // Метод добавляет к сообщению усовершенствованную подпись.
Возврат УбратьСимволы10_13(sSignedMessage); // Подпись в формате Base64
КонецФункции</code></pre>
</div></div><br /><br />После того как подставил oSigner.Options = 2; все заработало. </div></div><br /><br />Чтобы читабельнее было...<br /><br /></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid107594:1CAdESCOM возвращает неправильную подпись в формате Base64<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: two_oceans <a href="/forum2/default.aspx?g=posts&m=107592#post107592"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>https://docs.microsoft.com/ru-ru/windows/win32/seccrypto/signer-options вот эти похоже: включается один сертификат, цепочка без корневого или вся цепочка.</div></div><br /><br />Да, верно.<br /><br />Насчёт -1 = подразумевалось true, но смущает ответ.<br /></td></tr></table>2019-10-02T13:12:05+03:002019-10-02T13:12:05+03:00Андрей *<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: two_oceans <a href="/forum2/default.aspx?g=posts&m=107592#post107592"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>https://docs.microsoft.com/ru-ru/windows/win32/seccrypto/signer-options вот эти похоже: включается один сертификат, цепочка без корневого или вся цепочка.</div></div><br /><br />Да, верно.<br /><br />Насчёт -1 = подразумевалось true, но смущает ответ.<br /></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid107592:1CAdESCOM возвращает неправильную подпись в формате Base64<table class="content postContainer" width="100%"><tr><td><a rel="nofollow" href="https://docs.microsoft.com/ru-ru/windows/win32/seccrypto/signer-options" title="https://docs.microsoft.com/ru-ru/windows/win32/seccrypto/signer-options">https://docs.microsoft.c...seccrypto/signer-options</a> вот эти похоже: включается один сертификат, цепочка без корневого или вся цепочка.</td></tr></table>2019-10-02T13:06:31+03:002019-10-02T13:06:31+03:00two_oceans<table class="content postContainer" width="100%"><tr><td><a rel="nofollow" href="https://docs.microsoft.com/ru-ru/windows/win32/seccrypto/signer-options" title="https://docs.microsoft.com/ru-ru/windows/win32/seccrypto/signer-options">https://docs.microsoft.c...seccrypto/signer-options</a> вот эти похоже: включается один сертификат, цепочка без корневого или вся цепочка.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid107589:1CAdESCOM возвращает неправильную подпись в формате Base64<table class="content postContainer_Alt" width="100%"><tr><td>Вот так работает:<br /><br />Функция ПодписатьCAdES(ТекстДляПодписи, ComОбъектСертификата)<br /> <br /> CADESCOM_CADES_TYPE = 1; <br /> bDetached = 1;<br /> EncodingType = 0; <br /> <br /> oSigner = Новый COMОбъект("CAdESCOM.CPSigner"); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.<br /> oSigner.Certificate = ComОбъектСертификата;<br /> oSigner.Options = 2;<br /> oSigner.KeyPin = "ПарольОтУКЭП";<br /> <br /> oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData"); // Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью.<br /> oSignedData.ContentEncoding = 1;<br /><br /><br /> oSignedData.Content = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ТекстДляПодписи));<br /><br /> <br /> sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType); // Метод добавляет к сообщению усовершенствованную подпись.<br /><br /> <br /> Возврат УбратьСимволы10_13(sSignedMessage); // Подпись в формате Base64<br /> <br />КонецФункции<br /><br />После того как подставил oSigner.Options = 2; все заработало. Но до конца не понимаю что это, в справке сказано получает или устанавливает параметры сертификата, а какие параметры? где их найти?</td></tr></table>2019-10-02T12:50:11+03:002019-10-02T12:50:11+03:00sergei100<table class="content postContainer_Alt" width="100%"><tr><td>Вот так работает:<br /><br />Функция ПодписатьCAdES(ТекстДляПодписи, ComОбъектСертификата)<br /> <br /> CADESCOM_CADES_TYPE = 1; <br /> bDetached = 1;<br /> EncodingType = 0; <br /> <br /> oSigner = Новый COMОбъект("CAdESCOM.CPSigner"); // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.<br /> oSigner.Certificate = ComОбъектСертификата;<br /> oSigner.Options = 2;<br /> oSigner.KeyPin = "ПарольОтУКЭП";<br /> <br /> oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData"); // Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью.<br /> oSignedData.ContentEncoding = 1;<br /><br /><br /> oSignedData.Content = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ТекстДляПодписи));<br /><br /> <br /> sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType); // Метод добавляет к сообщению усовершенствованную подпись.<br /><br /> <br /> Возврат УбратьСимволы10_13(sSignedMessage); // Подпись в формате Base64<br /> <br />КонецФункции<br /><br />После того как подставил oSigner.Options = 2; все заработало. Но до конца не понимаю что это, в справке сказано получает или устанавливает параметры сертификата, а какие параметры? где их найти?</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid107588:1CAdESCOM возвращает неправильную подпись в формате Base64<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: sergei100 <a href="/forum2/default.aspx?g=posts&m=107573#post107573"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>2) bDetached = -1; Это false</div></div>Чисто для справки: это похоже код из 1с, а язык 1с это кириллический диалект Visual Basic. Так вот, в Visual Basic -1 (минус единица) это True (так как в двоичном представлении все биты установлены в 1), а 0 это False (все биты установлены в 0). Для других значений уже идут нюансы, но обычно все остальные значения трактуются тоже как True.[attach]7859[/attach]<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Андрей Вы правы detached исправил на true. Но пока не получается, еще что странно CadesSignedData возвращает строку без символов 10-13 равную 7 286 символов, а cmd равную 4 508 сим, не понимаю пока в чем проблема. </div></div>Возможно размер разный из-за включения полей cades-bes и сертификата.</td></tr></table>2019-10-02T12:34:02+03:002019-10-02T12:34:02+03:00two_oceans<table class="content postContainer" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: sergei100 <a href="/forum2/default.aspx?g=posts&m=107573#post107573"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>2) bDetached = -1; Это false</div></div>Чисто для справки: это похоже код из 1с, а язык 1с это кириллический диалект Visual Basic. Так вот, в Visual Basic -1 (минус единица) это True (так как в двоичном представлении все биты установлены в 1), а 0 это False (все биты установлены в 0). Для других значений уже идут нюансы, но обычно все остальные значения трактуются тоже как True.[attach]7859[/attach]<br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote>Андрей Вы правы detached исправил на true. Но пока не получается, еще что странно CadesSignedData возвращает строку без символов 10-13 равную 7 286 символов, а cmd равную 4 508 сим, не понимаю пока в чем проблема. </div></div>Возможно размер разный из-за включения полей cades-bes и сертификата.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid107584:1CAdESCOM возвращает неправильную подпись в формате Base64<table class="content postContainer_Alt" width="100%"><tr><td>Попробую подставить CADESCOM_PKCS7_TYPE</td></tr></table>2019-10-02T11:32:25+03:002019-10-02T11:32:25+03:00sergei100<table class="content postContainer_Alt" width="100%"><tr><td>Попробую подставить CADESCOM_PKCS7_TYPE</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid107583:1CAdESCOM возвращает неправильную подпись в формате Base64<table class="content postContainer" width="100%"><tr><td>Вроде нашел -out <file> Output PKCS#7 filename</td></tr></table>2019-10-02T11:31:13+03:002019-10-02T11:31:13+03:00sergei100<table class="content postContainer" width="100%"><tr><td>Вроде нашел -out <file> Output PKCS#7 filename</td></tr></table>