Статус: Участник
Группы: Участники
Зарегистрирован: 11.02.2021(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 1 раз
|
Автор: Санчир Момолдаев тогда думаю подойдет обычная подпись через SignedCms Код:ContentInfo contentInfo = new ContentInfo(dataToSign);
SignedCms signedCms = new SignedCms(contentInfo, true);
CmsSigner cmsSigner = new CmsSigner(certificate);
signedCms.ComputeSignature(cmsSigner);
Byte[] signatureResult = signedCms.Encode();
Не проходит подпись сообщения через NET, через JS проходит, видимо дело в преобразованиях уточню мне нужно подписать сообщение вида: Цитата:{"destination":"nmcades","requestid":44,"objid":14,"method":"SetHashValue","params":[{"type":"string","value":"D23B36DE601FEB70D77FEB9D5252CE380C2024A20B47561497E50751547D1705"}]}
поставляю D23B36DE601FEB70D77FEB9D5252CE380C2024A20B47561497E50751547D1705 в функцию JS (указано выше) подпись проходит. поставляю в функцию Net, через преобразования Цитата:byte[] message = Encoding.ASCII.GetBytes(postData.Message); на выходе делаю преобразования обратное Convert.ToBase64String(signedCms.Encode()) - подпись не верна! Отредактировано пользователем 8 июля 2021 г. 15:44:07(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,320 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Здравствуйте. Цитата: уточню мне нужно подписать сообщение вида:
Цитата: {"destination":"nmcades","requestid":44,"objid":14,"method":"SetHashValue","params":[{"type":"string","value":"D23B36DE601FEB70D77FEB9D5252CE380C2024A20B47561497E50751547D1705"}]}
поставляю D23B36DE601FEB70D77FEB9D5252CE380C2024A20B47561497E50751547D1705 в функцию JS (указано выше) подпись проходит.
Вы путаете интерфейсы и возможности. Подписать строку (файл\набор байтов) = внутри класса вычисляется хеш и он подписывается. В signedCms необходимо передавать исходные байты (сообщение\документ\файл = набор байтов), а не полученный от них хеш (D23B36DE601FEB70D77FEB9D5252CE380C2024A20B47561497E50751547D1705). |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,320 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Путь через SetHashValue - позволяет не передавать исходный документ на вход функции подписания (высокоуровневой). Например, на сервере 10Мб и есть вычисленный хеш - тогда на клиенте через SetHashValue инициализируется он и получаем ЭП, без скачивания 10Мб. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.02.2021(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей * Путь через SetHashValue - позволяет не передавать исходный документ на вход функции подписания (высокоуровневой). Например, на сервере 10Мб и есть вычисленный хеш - тогда на клиенте через SetHashValue инициализируется он и получаем ЭП, без скачивания 10Мб. спасибо за ответ, но я просил изначально перевести код JS в код Net. JS Цитата: var oHashedData = yield cadesplugin.CreateObjectAsync('CAdESCOM.HashedData'); yield oHashedData.propset_DataEncoding(1); //CADESCOM_CONTENT_ENCODING_TYPE.BASE64_TO_BINARY yield oHashedData.propset_Algorithm(101); //CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 yield oHashedData.SetHashValue(sHashValue);
var oSigningTimeAttr = yield cadesplugin.CreateObjectAsync("CADESCOM.CPAttribute"); yield oSigningTimeAttr.propset_Name(0);//CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME yield oSigningTimeAttr.propset_Value(ConvertDate(new Date()));
var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner"); yield oSigner.propset_Certificate(oCertificate); yield oSigner.propset_CheckCertificate(true); yield oSigner.propset_Options(1); //CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN var oAuthAttrs = yield oSigner.AuthenticatedAttributes2; yield oAuthAttrs.Add(oSigningTimeAttr);
var oSignedData = yield cadesplugin.CreateObjectAsync('CAdESCOM.CadesSignedData'); var sSignedMessage = yield oSignedData.SignHash(oHashedData, oSigner, 1); тут подписывается хеш документа, как мне сделать тоже самое на NET ?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,320 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Автор: code8525
тут подписывается хеш документа, как мне сделать тоже самое на NET ? Подключить и использовать COM-интерфейс CAdESCOM.dll. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.02.2021(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей * Автор: code8525
тут подписывается хеш документа, как мне сделать тоже самое на NET ? Подключить и использовать COM-интерфейс CAdESCOM.dll. Спасибо, понятно.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.02.2021(UTC) Сообщений: 11
Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей * Подключить и использовать COM-интерфейс CAdESCOM.dll.
Разобрался как подключить библиотеку, возникла ошибка Цитата:System.InvalidCastException HResult=0x80004002 Сообщение = Интерфейс не поддерживается Источник = Interop.CAdESCOM Трассировка стека: в CAdESCOM.CadesSignedDataClass.SignHash(HashedData Hash, Object Signer, CADESCOM_CADES_TYPE CadesType, CAPICOM_ENCODING_TYPE EncodingType) в ConsoleApp3.Program.Main(String[] args) в Program.cs:строка 44 Цитата: var hash = "9CA6371A5F7EE6F76F8A74A305CACC78183402DEA1CDB13868551CA5A707CDF1";
byte[] hashValue = Enumerable.Range(0, hash.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(hash.Substring(x, 2), 16)) .ToArray();
HashedData hashedData = new HashedDataClass(); hashedData.Algorithm = CAPICOM_HASH_ALGORITHM.CAPICOM_HASH_ALGORITHM_SHA_256; hashedData.Hash(hashValue);
AttributeClass attribute = new AttributeClass(); attribute.Name = CAPICOM_ATTRIBUTE.CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME; attribute.Value = DateTime.UtcNow;
SignerClass signer = new SignerClass(); signer.Certificate = cert; signer.Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN; signer.AuthenticatedAttributes.Add(attribute);
CadesSignedData cadesSignedData = new CadesSignedDataClass();
var out1 = cadesSignedData.SignHash( hashedData, signer, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64 );
Отредактировано пользователем 9 июля 2021 г. 10:16:52(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,190 Сказал(а) «Спасибо»: 100 раз Поблагодарили: 272 раз в 253 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 30.03.2021(UTC) Сообщений: 13
|
Здравствуйте! Мне необходимо подписывать текстовую строку присоединенной электронной подписью Не могли бы вы пожалуйста в общих чертах описать последовательность вызова функций для создания присоединенной ЭП? Правильная (отвечающая требованиям) подпись генерируется с помощью csptest со следующими атрибутами: Цитата:csptest -sfsign -sign -in "C:\temp\Test.txt" -out "C:\temp\Out.txt" -my "Значение атрибута CN" -base64 -add В данный момент получилось сделать следующее: https://bitbucket.org/pr...gn/src/master/Program.csПрограмма отрабатывает без ошибок, но выводимая подпись в разы короче, чем генерируемая csptest
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,320 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Автор: anton26 Здравствуйте! Мне необходимо подписывать текстовую строку присоединенной электронной подписью Не могли бы вы пожалуйста в общих чертах описать последовательность вызова функций для создания присоединенной ЭП? Правильная (отвечающая требованиям) подпись генерируется с помощью csptest со следующими атрибутами: Цитата:csptest -sfsign -sign -in "C:\temp\Test.txt" -out "C:\temp\Out.txt" -my "Значение атрибута CN" -base64 -add В данный момент получилось сделать следующее: https://bitbucket.org/pr...gn/src/master/Program.csПрограмма отрабатывает без ошибок, но выводимая подпись в разы короче, чем генерируемая csptest Вы сделали RAW, а необходимо CMS. Примеры есть в составе КриптоПРО.NET SDK |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close