Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,984   Сказал «Спасибо»: 605 раз Поблагодарили: 2350 раз в 1846 постах
|
|
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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 - заменить на своё...
или переписать в более короткий вариант. |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close