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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Виталий Юдин  
#1 Оставлено : 26 июня 2019 г. 18:02:13(UTC)
Виталий Юдин

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

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

Сказал(а) «Спасибо»: 5 раз
Добрый день. Пытаюсь авторизоваться в ЦРПТ по маркировке табака.
Получаю от них:
{"uuid":"32d4954c-2a06-4d0d-af67-82c4647855a0","data":"UCJTKPBJJJBGTCXHVZHGKAAPPNDUXD"}
Мне нужно подписать сертификатом значение из поля data
Делаю вот так:

byte[] hashValue = gost3411.ComputeHash(System.Text.Encoding.UTF8.GetBytes(data));

теперь пытаюсь вывести хэш на экран:
this.textBox1.Text = System.Text.Encoding.UTF8.GetString(hashValue);
И получаю совершенно нечитаемое "a(e�C���ϖhMw��@LEi��2�V�<G�"

Что я делаю неправильно?
Offline Андрей Писарев  
#2 Оставлено : 26 июня 2019 г. 18:27:55(UTC)
Андрей *

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

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

Сказал «Спасибо»: 499 раз
Поблагодарили: 2043 раз в 1584 постах
Здравствуйте.

Почему должно быть читаемое?
Это набор байтов.




Зачем отдельно расчитывать хеш?

Подпись:
Код:
 
byte[] msg, X509Certificate2 signerCert, bool detached = true или false

ContentInfo contentInfo = new ContentInfo(msg);
            SignedCms signedCms = new SignedCms(contentInfo, detached); 
            CmsSigner cmsSigner = new CmsSigner(signerCert); 
            cmsSigner.IncludeOption = X509IncludeOption.EndCertOnly; 
            signedCms.ComputeSignature(cmsSigner);
            return signedCms.Encode();


Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Виталий Юдин оставлено 27.06.2019(UTC)
Offline Максим Коллегин  
#3 Оставлено : 26 июня 2019 г. 18:28:38(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
хэш - набор байт, в виде строки его можно представить только преобразовав. Например каждый байт в два шестнадцетичных символа. https://stackoverflow.co...23104/byte-to-hex-string
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
Виталий Юдин оставлено 27.06.2019(UTC)
Offline two_oceans  
#4 Оставлено : 27 июня 2019 г. 7:13:15(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Для представления набора байт в виде строки не обязательно конвертировать именно в hex... вариантов преобразования может быть достаточно много, Base64 кодирование, например, hex от endian-reversed массива байт или десятичное представление или любая другая система счисления тоже подойдут (хэш не такой уж длинный, хотя такие представления редко кто использует). Поэтому желательно точно знать что нужно получить.

Для просмотра на экране Hex может быть и удобен, но при передаче через интернет Base64 более распространен. Честно говоря, я бы для визуального сравнения выбрал Base64, так как Base64 дает 4/3 байта на 1 исходный байт, а Hex 2 байта.

Отредактировано пользователем 27 июня 2019 г. 7:38:10(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
Виталий Юдин оставлено 27.06.2019(UTC)
Offline Виталий Юдин  
#5 Оставлено : 27 июня 2019 г. 9:07:23(UTC)
Виталий Юдин

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

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

Сказал(а) «Спасибо»: 5 раз
Андрей, добрый день. Спасибо за ответ.
Автор: Андрей Писарев Перейти к цитате
Здравствуйте.

Почему должно быть читаемое?
Это набор байтов.




Набор байтов, но я же его в строку перевожу. После подписи должно получится что то читаемое, но все равно даже так как вы подсказали не работает - получаю опять вот такое
"0�o *�H����`0�\1 0*� "
Вот код:

cert = LoadCertificate(StoreLocation.CurrentUser, @"SN=..."); (Сертификат я получаю успешно)
byte[] signedbyte = SignMe(Encoding.UTF8.GetBytes(data),cert); //Это функция из поста выше, а data =="XZXPJYDKTKNFMTKVWTUSYRQIKZXYUL"
sign = System.Text.Encoding.UTF8.GetString(signedbyte);
this.textBox1.Text += sign;

Если верить https://www.cryptopro.ru...ge/cades_bes_sample.html я должен получить что то типа
"MIIbFgYJKoZIhvcNAQcCoIIbBzCCGwMCAQExDDAKBgYqhQMCAgkFADAtBgkqhkiG9w0BBwGgIAQe
WFpYUEpZREtUS05GTVRLVldUVVNZUlFJS1pYWVVMoIIWVDCCBRkwggTIoAMCAQICEDRoHkDLQe8z.... иного много букв"




Offline Андрей Писарев  
#6 Оставлено : 27 июня 2019 г. 9:22:19(UTC)
Андрей *

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

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

Сказал «Спасибо»: 499 раз
Поблагодарили: 2043 раз в 1584 постах
Автор: Виталий Юдин Перейти к цитате

Если верить https://www.cryptopro.ru...ge/cades_bes_sample.html я должен получить что то типа
"MIIbFgYJKoZIhvcNAQcCoIIbBzCCGwMCAQExDDAKBgYqhQMCAgkFADAtBgkqhkiG9w0BBwGgIAQe
WFpYUEpZREtUS05GTVRLVldUVVNZUlFJS1pYWVVMoIIWVDCCBRkwggTIoAMCAQICEDRoHkDLQe8z.... иного много букв"



1) Вы пишите на .NET. Получили byte[], желаете "посмотреть" на байты? HEX или кодировать в base64.

2) На сайте, если посмотрите, кодируется набор байтов в base64 для визуализации\передачи между ИС.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#7 Оставлено : 27 июня 2019 г. 9:24:45(UTC)
Андрей *

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

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

Сказал «Спасибо»: 499 раз
Поблагодарили: 2043 раз в 1584 постах
Автор: Виталий Юдин Перейти к цитате

Набор байтов, но я же его в строку перевожу. После подписи должно получится что то читаемое, но все равно даже так как вы подсказали не работает - получаю опять вот такое
"0�o *�H����`0�\1 0*� "


Подпись - набор байтов.
Никому ничего не должно получиться читаемым.

Использовать кодирование, как общий пример:
Код:

string s = Convert.ToBase64String(bytes); 

Техническую поддержку оказываем тут
Наша база знаний
Offline Виталий Юдин  
#8 Оставлено : 27 июня 2019 г. 9:25:23(UTC)
Виталий Юдин

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

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

Сказал(а) «Спасибо»: 5 раз
С нечитаемыми символами вроде понятно, всем спасибо. Но вот сгенерировать правильную подпись все равно не получается.
Сделал sign = Convert.ToBase64String(signedbyte);
получить строку типа "MIIObwYJKoZIhvcNAQcCoIIOYDCCDlwCAQExDDAKBgYqhQMCAgkFADALBg ... много букв", которая отличается от того что показывает сайт криптопро, а црпт не принимает подпись с сообщением "message-digest attribute value does not match calculated value".

Вот описание схемы авторизации ЦРПТ:
По авторизации следующая ситуация.

Вызываете GET https://ismotp.crptech.ru/api/v3/auth/cert/key

Ответ:

{

"uuid": "f1560e70-303d-4c3a-8de7-2b25872844b3",

"data": "MRSFGACDEEWQGQHLBFGQNIYIJWRYWM"

}

Подписываете строку data КЭП организации
Отправляете в теге data подписанный блок.

POST https://ismotp.crptech.ru/api/v3/auth/cert/ - получение токена

Body

{

"uuid": "f1560e70-303d-4c3a-8de7-2b25872844b3",

"data": "RImlubiI6Ijc3MzEzNjk5MjgiLCJwa ………………………"

}

Ответ:

{

"token": "eyJh……………………………3jI"

}




Offline Андрей Писарев  
#9 Оставлено : 27 июня 2019 г. 9:39:15(UTC)
Андрей *

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

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

Сказал «Спасибо»: 499 раз
Поблагодарили: 2043 раз в 1584 постах
Цитата:
которая отличается от того что показывает сайт криптопро

1. На демостранице - формируется присоединенная электронная подпись ( подписываемые данные + ЭП)
2. Каждый раз подпись под одним и тем же набором байтов будет разная. Это специфика ГОСТ-а.


Главная > FAQ > Продукты > КриптоПро CSP > Разработчикам > Различная подпись для одних и тех же данных.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Виталий Юдин оставлено 27.06.2019(UTC)
Offline Андрей Писарев  
#10 Оставлено : 27 июня 2019 г. 9:41:40(UTC)
Андрей *

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

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

Сказал «Спасибо»: 499 раз
Поблагодарили: 2043 раз в 1584 постах
Автор: Виталий Юдин Перейти к цитате

По авторизации следующая ситуация.

Вызываете GET https://ismotp.crptech.ru/api/v3/auth/cert/key

Подписываете строку data КЭП организации
Отправляете в теге data подписанный блок.



Тип подписи: присоединенная или отсоединенная?
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Виталий Юдин оставлено 27.06.2019(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.