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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Андрей *  
#11 Оставлено : 31 октября 2025 г. 22:17:26(UTC)
Андрей *

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

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

Сказал «Спасибо»: 605 раз
Поблагодарили: 2350 раз в 1846 постах
https://github.com/Crypt...otnetcades/SignedData.cs
public int ContentEncoding



Далее про content-encoding есть описание,
значит:
.ContentEncoding = 1;
.oSignedData.Content = base64(байты);
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#12 Оставлено : 31 октября 2025 г. 22:37:25(UTC)
Андрей *

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

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

Сказал «Спасибо»: 605 раз
Поблагодарили: 2350 раз в 1846 постах
string text = "Привет, мир!";
Encoding ansiEncoding = Encoding.Default;
// Encoding ansiEncoding = Encoding.GetEncoding(1251); // Windows-1251 (кириллица)

byte[] ansiBytes = ansiEncoding.GetBytes(text);
string base64String = Convert.ToBase64String(ansiBytes);


.ContentEncoding = 1;
.oSignedData.Content = base64String;


text - заменить на своё...

или переписать в более короткий вариант.
Техническую поддержку оказываем тут
Наша база знаний
Offline Алексей Тюленев  
#13 Оставлено : 1 ноября 2025 г. 14:38:35(UTC)
Алексей Тюленев

Статус: Новичок

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

Автор: Андрей * Перейти к цитате
https://github.com/CryptoPro/dotnetcades/blob/main/dotnetcades/SignedData.cs
public int ContentEncoding
Далее про content-encoding есть описание,
значит:
.ContentEncoding = 1;
.oSignedData.Content = base64(байты);


Благодарю за помощь.
Действительно помогло.
Без Вашей помощи я бы еще очень долго шел к тому, что нужно сделать с Content.
Думаю для dotnetcades необходимо дополнить описание и примеры использования:

При использовании библиотеки необходимо учитывать особенности работы с подписываемым/кодируемым содержимым.
Для подписания данных необходимо создать объект типа dotnetcades.SignedData (далее - объект). Содержимое, которое необходимо подписать записывается в свойство Content этого объекта, при этом сразу же происходит кодирование этого содержимого по способу CADESCOM_STRING_TO_UCS2LE (это способ по-умолчанию, подробнее о кодировании тут: https://docs.cryptopro.r...lugin/content-encoding). Чтобы изменить способ кодирования необходимо предварительно установить свойство ContentEncoding объекта равным 1 (что соответствует CADESCOM_BASE64_TO_BINARY - перекодировка данных из Bas64 в бинарный массив). Это необходимо сделать перед установкой значения для свойства Content.

И правильный пример для создания и проверки подписи (взамен имеющегося тут):

Код:

using System;
using System.Text;
using dotnetcades;

namespace samples
{
    public static class SignVerifyCadesBes
    {
        public static void Run()
        {
            const string CertificateSN = "Test Certificate";
            // Предположим, что нам необходимо подписать следующий текст:
            const string TextToSign = "Test content to be signed";
            // Данные для подписания должны представлять собой строку в кодировке BASE64
            // Поэтому сначала преобразуем наш текст в массив байт в нужной кодировке, а затем в строку BASE64
            // Для случая чтения содержимого файла необходимо прочитать его байты и затем выполнить Convert.ToBase64String(fileBytes)
            string DataToSign = Convert.ToBase64String(Encoding.Default.GetBytes(TextToSign));
            try
            {
                using var oStore = new dotnetcades.Store();
                oStore.Open(NC.CADESCOM_CURRENT_USER_STORE, NC.CAPICOM_MY_STORE, NC.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

                using var oCertificates = oStore.Certificates;
                using var foundCerts = oCertificates.Find(NC.CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, CertificateSN);
                if (foundCerts.Count == 0)
                {
                    Console.WriteLine($"Certificates with private key not found");
                    return;
                }

                using var oSigner = new dotnetcades.Signer();
                using var oCertificate = foundCerts.Item(1);
                oSigner.Certificate = oCertificate;
                oSigner.CheckCertificate = true;

                using var oSignedData = new dotnetcades.SignedData();
                // Задаем способ кодирования контента, чтобы данные из BASE64 были корректно распознаны
                // Обязательно перед присвоением значения свойству Content
                oSignedData.ContentEncoding = 1; //https://docs.cryptopro.ru/cades/plugin/content-encoding
                oSignedData.Content = DataToSign;
                var signature = oSignedData.SignCades(oSigner, NC.CADESCOM_CADES_BES);
                Console.WriteLine($"Signed Message: {signature}");

                var oSignedDataVerify = new dotnetcades.SignedData();
                oSignedDataVerify.VerifyCades(signature, NC.CADESCOM_CADES_BES);
                Console.WriteLine($"Verified successfully");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

Отредактировано пользователем 1 ноября 2025 г. 15:23:46(UTC)  | Причина: Не указана

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