powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Цифровая подпись. Какие допустимые входные данные ?
7 сообщений из 7, страница 1 из 1
Цифровая подпись. Какие допустимые входные данные ?
    #38778987
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

Мне нужно сделать служебную библиотеку, для создания/проверки цифровой подписи.

Системные API функции принимают массив байт.

Вопросик такой. Какие типы, на подписывание, я могу использовать при создании своего API ? Особенно интересует возможность
подписывания строки !

Я вижу лишь два возможных типа: массив байт, и путь к файлу, который я сам смогу считать.

А как быть со строкой ? Не вижу возможности подписывать непосредственно строку - ведь я не знаю ее кодировки.


Или я ошибаюсь и есть возможность преобразовать любую строку в массив байт и его подписать ?
...
Рейтинг: 0 / 0
Цифровая подпись. Какие допустимые входные данные ?
    #38778997
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот тут есть некое решение
http://stackoverflow.com/questions/472906/converting-a-string-to-byte-array

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
static byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}

static string GetString(byte[] bytes)
{
    char[] chars = new char[bytes.Length / sizeof(char)];
    System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
    return new string(chars);
}



Насколько оно корректное ?
...
Рейтинг: 0 / 0
Цифровая подпись. Какие допустимые входные данные ?
    #38779039
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ростигай, в комментариях к ответу описаны подводные камни такого подхода. Лучше через класс Encoding делать:
Код: c#
1.
2.
byte[] bytes = Encoding.UTF8.GetBytes("....");
string s = Encoding.UTF8.GetString(bytes);
...
Рейтинг: 0 / 0
Цифровая подпись. Какие допустимые входные данные ?
    #38779049
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РостигайИли я ошибаюсь и есть возможность преобразовать любую строку в массив байт и его подписать ?
Нет понятия Строка в применении к ЭЦП. ЭЦП гарантирует целостность массива байт, и никак иначе. Поэтому берите строку, получайте из неё массив байт и подписывайте его. А какая кодировка - это уже не важно. Это ответственность бизнес-логики как интерпретировать некий массив байтов
...
Рейтинг: 0 / 0
Цифровая подпись. Какие допустимые входные данные ?
    #38779062
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79РостигайИли я ошибаюсь и есть возможность преобразовать любую строку в массив байт и его подписать ?
Нет понятия Строка в применении к ЭЦП. ЭЦП гарантирует целостность массива байт, и никак иначе. Поэтому берите строку, получайте из неё массив байт и подписывайте его. А какая кодировка - это уже не важно. Это ответственность бизнес-логики как интерпретировать некий массив байтов

В том и дело. Как получить из строки массив байт ?
Я вот приложил нагугленный код, но bazile не согласен с решением.

Суть в том. что в либу передается строка, но не указана кодировка. А значит, я не могу преобразовать строку в массив байт... Так ?
Или все же могу ?
...
Рейтинг: 0 / 0
Цифровая подпись. Какие допустимые входные данные ?
    #38779065
Ростигай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile,

UTF8... А откуда мне знать какая там кодировка у полученной строки ?
Или вводить дополнительный параметр для кодировки ?

Эх... Все бы хорошо, если бы не проблема, что я пишу COM либу... В других языках нету класса энкодинга.
...
Рейтинг: 0 / 0
Цифровая подпись. Какие допустимые входные данные ?
    #38779106
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ростигай, без знания кодировки невозможно правильно восстановить исходную строку. Пример который ты нашел на SO тоже полагается на кодировку - только неявно. Строка в .NET хранится в памяти в кодировке UTF-16 и в этой кодировке байты и возвращаются. Раз ты пишешь библиотеку, то возможно придется явно передавать кодировку в метод. Дело здесь не в COM или отсутствии класса Encoding в другиых языках. Кодировка это универсальное понятие. Чужой код который будет анализировать "твою подпись", тоже должен преобразовать строку в массив байтов (так или иначе) и вычислить подпись чтобы убедиться в неизменности данных.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Цифровая подпись. Какие допустимые входные данные ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]