Статус: Новичок
Группы: Участники
Зарегистрирован: 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�"
Что я делаю неправильно?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Здравствуйте. Почему должно быть читаемое? Это набор байтов. Зачем отдельно расчитывать хеш? Подпись: Код:
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();
|
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
|
|
1 пользователь поблагодарил Максим Коллегин за этот пост.
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Для представления набора байт в виде строки не обязательно конвертировать именно в hex... вариантов преобразования может быть достаточно много, Base64 кодирование, например, hex от endian-reversed массива байт или десятичное представление или любая другая система счисления тоже подойдут (хэш не такой уж длинный, хотя такие представления редко кто использует). Поэтому желательно точно знать что нужно получить. Для просмотра на экране Hex может быть и удобен, но при передаче через интернет Base64 более распространен. Честно говоря, я бы для визуального сравнения выбрал Base64, так как Base64 дает 4/3 байта на 1 исходный байт, а Hex 2 байта. Отредактировано пользователем 27 июня 2019 г. 7:38:10(UTC)
| Причина: Не указана
|
1 пользователь поблагодарил two_oceans за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 26.06.2019(UTC) Сообщений: 4 Откуда: Ростов На Дону Сказал(а) «Спасибо»: 5 раз
|
Андрей, добрый день. Спасибо за ответ. Автор: Андрей Писарев Здравствуйте.
Почему должно быть читаемое? Это набор байтов.
Набор байтов, но я же его в строку перевожу. После подписи должно получится что то читаемое, но все равно даже так как вы подсказали не работает - получаю опять вот такое "0�o *�H����`0�\10*� " Вот код: 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.... иного много букв"
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Автор: Виталий Юдин Если верить https://www.cryptopro.ru...ge/cades_bes_sample.html я должен получить что то типа "MIIbFgYJKoZIhvcNAQcCoIIbBzCCGwMCAQExDDAKBgYqhQMCAgkFADAtBgkqhkiG9w0BBwGgIAQe WFpYUEpZREtUS05GTVRLVldUVVNZUlFJS1pYWVVMoIIWVDCCBRkwggTIoAMCAQICEDRoHkDLQe8z.... иного много букв" 1) Вы пишите на .NET. Получили byte[], желаете "посмотреть" на байты? HEX или кодировать в base64. 2) На сайте, если посмотрите, кодируется набор байтов в base64 для визуализации\передачи между ИС. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Автор: Виталий Юдин Набор байтов, но я же его в строку перевожу. После подписи должно получится что то читаемое, но все равно даже так как вы подсказали не работает - получаю опять вот такое "0�o *�H����`0�\10*� "
Подпись - набор байтов. Никому ничего не должно получиться читаемым. Использовать кодирование, как общий пример: Код:
string s = Convert.ToBase64String(bytes);
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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" }
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Цитата:которая отличается от того что показывает сайт криптопро 1. На демостранице - формируется присоединенная электронная подпись ( подписываемые данные + ЭП) 2. Каждый раз подпись под одним и тем же набором байтов будет разная. Это специфика ГОСТ-а. Главная > FAQ > Продукты > КриптоПро CSP > Разработчикам > Различная подпись для одних и тех же данных. |
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
Автор: Виталий Юдин Тип подписи: присоединенная или отсоединенная? |
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close