Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

4 Страницы<1234>
Опции
К последнему сообщению К первому непрочитанному
Offline code8525  
#11 Оставлено : 8 июля 2021 г. 15:40:19(UTC)
code8525

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Андрей *  
#12 Оставлено : 8 июля 2021 г. 15:55:41(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).
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#13 Оставлено : 8 июля 2021 г. 15:58:49(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,320
Мужчина
Российская Федерация

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Путь через SetHashValue - позволяет не передавать исходный документ на вход функции подписания (высокоуровневой).
Например, на сервере 10Мб и есть вычисленный хеш - тогда на клиенте через SetHashValue инициализируется он и получаем ЭП, без скачивания 10Мб.
Техническую поддержку оказываем тут
Наша база знаний
Offline code8525  
#14 Оставлено : 8 июля 2021 г. 16:06:48(UTC)
code8525

Статус: Участник

Группы: Участники
Зарегистрирован: 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 ?
Offline Андрей *  
#15 Оставлено : 8 июля 2021 г. 16:10:09(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,320
Мужчина
Российская Федерация

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Автор: code8525 Перейти к цитате


тут подписывается хеш документа, как мне сделать тоже самое на NET ?


Подключить и использовать COM-интерфейс CAdESCOM.dll.


Техническую поддержку оказываем тут
Наша база знаний
Offline code8525  
#16 Оставлено : 8 июля 2021 г. 16:14:50(UTC)
code8525

Статус: Участник

Группы: Участники
Зарегистрирован: 11.02.2021(UTC)
Сообщений: 11

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей * Перейти к цитате
Автор: code8525 Перейти к цитате


тут подписывается хеш документа, как мне сделать тоже самое на NET ?


Подключить и использовать COM-интерфейс CAdESCOM.dll.




Спасибо, понятно.
Offline code8525  
#17 Оставлено : 9 июля 2021 г. 8:02:59(UTC)
code8525

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Санчир Момолдаев  
#18 Оставлено : 14 июля 2021 г. 4:58:01(UTC)
Санчир Момолдаев

Статус: Сотрудник

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,190
Российская Федерация

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 272 раз в 253 постах
а какая версия библиотеки? установите плагин версии 2.0
Техническую поддержку оказываем тут
Наша база знаний
Offline anton26  
#19 Оставлено : 30 июля 2021 г. 15:31:44(UTC)
anton26

Статус: Участник

Группы: Участники
Зарегистрирован: 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
Offline Андрей *  
#20 Оставлено : 30 июля 2021 г. 16:24:23(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 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




Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
4 Страницы<1234>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.