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

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline code8525  
#1 Оставлено : 2 июня 2021 г. 12:33:58(UTC)
code8525

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день,

есть код на JS, как сделать тоже самое на Net? или через командную строку csptest

Цитата:

var oHashedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.HashedData");
yield oHashedData.propset_Algorithm(101); //CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
yield oHashedData.SetHashValue("E0438626A6EBA03330B01A85571CA69E3B019A4E801374D6B04089C2A105DB2F");
var oRawSignature = yield cadesplugin.CreateObjectAsync("CAdESCOM.RawSignature");
var sSignedMessage = yield oRawSignature.SignHash(oHashedData, oCertificate);


на выходе строка 128 символов

Отредактировано пользователем 2 июня 2021 г. 12:37:14(UTC)  | Причина: Не указана

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

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
Добрый день!
.Net:
Код:
            byte[] data = File.ReadAllBytes(fileName);
            
            // Создаем объект для хэширования.
            Gost3411_2012_256CryptoServiceProvider gost3411 = new Gost3411_2012_256CryptoServiceProvider();
            // Вычисляем хэш от всех прочитанных данных.
            byte[] hashValue = gost3411.ComputeHash(data);
            gost3411.Clear();

            X509Certificate2 signerCert = GetSignerCert("test2012");
            Console.WriteLine("Сертификат: {0}",signerCert.Subject);
            // первый способ
            Gost2012_256SignatureFormatter gost = new Gost2012_256SignatureFormatter();
            gost.SetKey(signerCert.PrivateKey);
            byte[] sign = gost.CreateSignature(hashValue);

            File.WriteAllBytes(sigFileName1,sign.Reverse().ToArray());

            // второй способ
            Gost3410_2012_256CryptoServiceProvider cert_key = signerCert.PrivateKey as Gost3410_2012_256CryptoServiceProvider;
            sign = cert_key.CreateSignature(hashValue);
            File.WriteAllBytes(sigFileName2, sign);

пойбайтово надо переворачивать (.Reverse().ToArray()) для совместимости с CSP.

Отредактировано пользователем 2 июня 2021 г. 18:28:51(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
code8525 оставлено 02.07.2021(UTC)
Offline code8525  
#3 Оставлено : 2 июля 2021 г. 16:36:04(UTC)
code8525

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Санчир Момолдаев Перейти к цитате
Добрый день!
.Net:
пойбайтово надо переворачивать (.Reverse().ToArray()) для совместимости с CSP.


Спасибо! Получилось только hash читал по другому

Код:

          byte[] hashValue = Enumerable.Range(0, hash.Length)
                             .Where(x => x % 2 == 0)
                             .Select(x => Convert.ToByte(hash.Substring(x, 2), 16))
                             .ToArray();


А можете ещё сориентировать, как добавить атрибут к подписи? Код на 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);
        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);

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

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
вы какую подпись хотите получить?
в raw подписи нет аттрибутов.
и какой аттрибут хотите добавить.

зачем такая операция с hashValue? какая длина получилась?
Техническую поддержку оказываем тут
Наша база знаний
Offline code8525  
#5 Оставлено : 4 июля 2021 г. 7:51:36(UTC)
code8525

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Санчир Момолдаев Перейти к цитате
вы какую подпись хотите получить?
в raw подписи нет аттрибутов.

Обычную открепленную подпись

Автор: Санчир Момолдаев Перейти к цитате
и какой аттрибут хотите добавить.

CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0



Код:

        public static string SignData(string hash, string inn)
        {

            byte[] hashValue = Enumerable.Range(0, hash.Length)
                             .Where(x => x % 2 == 0)
                             .Select(x => Convert.ToByte(hash.Substring(x, 2), 16))
                             .ToArray();

            X509Certificate2 signerCert = GetSignerCert(inn);

            Gost3410_2012_256 privateKey = signerCert.PrivateKey as Gost3410_2012_256;

            ContentInfo contentInfo = new ContentInfo(hashValue);
            SignedCms signedCms = new SignedCms(contentInfo, true);
            CmsSigner cmsSigner = new CmsSigner(SubjectIdentifierType.Unknown, signerCert);

            cmsSigner.SignedAttributes.Add(new Pkcs9SigningTime(DateTime.Now));
            cmsSigner.IncludeOption = X509IncludeOption.WholeChain;
            signedCms.ComputeSignature(cmsSigner);
            byte[] sign = signedCms.Encode();

            string hex = BitConverter.ToString(sign).Replace("-", string.Empty);

            return hex;

        }


Правильно я нагуглил?
Offline Санчир Момолдаев  
#6 Оставлено : 4 июля 2021 г. 8:16:51(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
на windows данный аттрибут добавляется автоматически начиная с csp4.0
Техническую поддержку оказываем тут
Наша база знаний
Offline code8525  
#7 Оставлено : 5 июля 2021 г. 15:20:50(UTC)
code8525

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Санчир Момолдаев Перейти к цитате
на windows данный аттрибут добавляется автоматически начиная с csp4.0


вы можете мне весь код перевести на Net ?

Код:
        
        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);
Offline Санчир Момолдаев  
#8 Оставлено : 5 июля 2021 г. 22:19:04(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
какая конечная цель?
подпись по хэшу нет в SignedCMS
С# на Windows можно использовать Com интерфейс CadesCom так что код будет идентичен
Техническую поддержку оказываем тут
Наша база знаний
Offline code8525  
#9 Оставлено : 6 июля 2021 г. 5:32:08(UTC)
code8525

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Санчир Момолдаев Перейти к цитате
какая конечная цель?
подпись по хэшу нет в SignedCMS
С# на Windows можно использовать Com интерфейс CadesCom так что код будет идентичен


мне нужно подписать строку
Offline Санчир Момолдаев  
#10 Оставлено : 6 июля 2021 г. 7:10:30(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
тогда думаю подойдет обычная подпись через SignedCms
Код:
ContentInfo contentInfo = new ContentInfo(dataToSign);
SignedCms signedCms = new SignedCms(contentInfo, true);
CmsSigner cmsSigner = new CmsSigner(certificate);
signedCms.ComputeSignature(cmsSigner);
Byte[] signatureResult = signedCms.Encode();
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
4 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.