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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline voron29  
#1 Оставлено : 12 марта 2024 г. 7:43:38(UTC)
voron29

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

Группы: Участники
Зарегистрирован: 12.03.2024(UTC)
Сообщений: 4

Здравствуйте. Может кто сталкивался?
Хочу получить токен честного знака.
Есть html-страница со списком подписей. Выбираю подпись и подписываю строку данных, полученную из честного знака, например пусть будет VCRSUTAGGCDCNQCSPMAUBCAMOQJBZG. Далее, полученная подпись выводится в textarea, в ней вижу несколько строк. Ее нужно отправить на api честного знака (ЧЗ), но ЧЗ он выдает ошибку разбора JSON:
Цитата:
"Некорректный JSON. Данные ошибки: Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using backslash to be included in string value. ru.crpt.trueapi.dto.auth.AuthSignInRequest[\"data\"] [line: 1, column: 133]"

ПРобовал textarea.value.replaceAll('\n',''), и textarea.value.replaceAll('\n','\\n'), и textarea.value.replaceAll('\n','\\\\n'), но ошибка не ушла или возвращалась ошибка проверки подписи.
Может что-то не так делаю?
Offline Андрей *  
#2 Оставлено : 12 марта 2024 г. 8:53:33(UTC)
Андрей *

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

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

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

А как переводится текст ошибки, там ещё и код символа указан?

Чем отличаются \n И \r ?
Техническую поддержку оказываем тут
Наша база знаний
Offline voron29  
#3 Оставлено : 12 марта 2024 г. 11:39:18(UTC)
voron29

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

Группы: Участники
Зарегистрирован: 12.03.2024(UTC)
Сообщений: 4

Благодарю, направили в нужное русло. Экранировал \r и \n.
Но теперь другая ошибка, не могу найти решение. Честный знак выдает ошибку
Цитата:
{"error_message":"Input byte array has wrong 4-byte ending unit"}

Вот мой запрос с html-страницы:

Цитата:
let xhr_cz = new XMLHttpRequest()
let formData = new FormData();
formData.append("uuid", document.querySelector('#uuid').innerHTML);
formData.append("data", document.querySelector('textarea').value);
xhr_cz.open("POST", 'test.php')
xhr_cz.onload=function(d_cz){
console.log(d_cz.target.response)
}
xhr_cz.send(formData)


Вот код test.php

Цитата:
$uuid = $_POST['uuid'];
$data = str_replace(chr(13),'\\'+chr(13),$_POST['data']);
$data = str_replace(chr(10),'\\'+chr(10),$data);
$url = 'https://markirovka.crpt.ru/api/v3/true-api/auth/simpleSignIn';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"uuid":"'.$uuid.'","data":"'.$data.'"}');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['accept:application/json', 'Content-Type:application/json']);
$req = curl_exec($ch);
curl_close($ch);
echo $req;


Здесь echo $req выводит описанное ранее сообщение {"error_message":"Input byte array has wrong 4-byte ending unit"}
Offline Андрей *  
#4 Оставлено : 12 марта 2024 г. 13:35:22(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Что мешает посмотреть, что отправляется, записав в файл?

И str_replace понятно что делает, зачем?

Отредактировано пользователем 12 марта 2024 г. 13:36:00(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline voron29  
#5 Оставлено : 13 марта 2024 г. 8:33:59(UTC)
voron29

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

Группы: Участники
Зарегистрирован: 12.03.2024(UTC)
Сообщений: 4

Отправляются подписанные данные. То есть подписывается строка полученная из честного знака (ЧЗ) VCRSUTAGGCDCNQCSPMAUBCAMOQJBZG выбранной электронной подписью. Получается сформированная подпись из нескольких строк, примерно такая

Цитата:
MIINDgYJKoZIhvcNAQcCoIIM/zCCDPsCAQExDjAMBggqhQMHAQECAgUAMBoGCSqGSIb3DQEHAaAN
BAtIZWxsbyBXb3JsZKCCCMwwggjIMIIIdaADAgECAhECzQGDACmxN6BBPFCab/cTEzAKBggqhQMH
**** тут еще много-много строк
AhECzQGDACmxN6BBPFCab/cTEzAKBggqhQMHAQEBAQRAX2u0TQhIxets/GwpBmDdf9+vDk+KHdGE
hhVAs77Pg8ZsJogWwlZGxQK/FoPTko8KblD5F9J7PuBal4MYwC/APA==


Сформированная подпись из html файла передается с использованием XMLHttpRequest в test.php. Там делаю $data = str_replace(chr(13),'\\'+chr(13),$_POST['data']);, т.к. если не заменить, то возвращается ошибка "Illegal unquoted character ((CTRL-CHAR, code 13))". Когда экранирую символ с кодом 13, возвращается ошибка Illegal unquoted character ((... code 10)). То есть надо еще экранировать символ с кодом 10. Пробовал также заменять
Цитата:
$data = str_replace(chr(13),'\\\r',$_POST['data']);
$data = str_replace(chr(10),'\\\n',$data);

И в итоге возвращается ошибка {"error_message":"Input byte array has wrong 4-byte ending unit"}
Видимо, вопрос нужно адресовать в ЧЗ
Offline Андрей *  
#6 Оставлено : 13 марта 2024 г. 10:08:37(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Автор: voron29 Перейти к цитате
Отправляются подписанные данные. То есть подписывается строка полученная из честного знака (ЧЗ) VCRSUTAGGCDCNQCSPMAUBCAMOQJBZG выбранной электронной подписью. Получается сформированная подпись из нескольких строк, примерно такая

Цитата:
MIINDgYJKoZIhvcNAQcCoIIM/zCCDPsCAQExDjAMBggqhQMHAQECAgUAMBoGCSqGSIb3DQEHAaAN
BAtIZWxsbyBXb3JsZKCCCMwwggjIMIIIdaADAgECAhECzQGDACmxN6BBPFCab/cTEzAKBggqhQMH
**** тут еще много-много строк
AhECzQGDACmxN6BBPFCab/cTEzAKBggqhQMHAQEBAQRAX2u0TQhIxets/GwpBmDdf9+vDk+KHdGE
hhVAs77Pg8ZsJogWwlZGxQK/FoPTko8KblD5F9J7PuBal4MYwC/APA==


Сформированная подпись из html файла передается с использованием XMLHttpRequest в test.php. Там делаю $data = str_replace(chr(13),'\\'+chr(13),$_POST['data']);, т.к. если не заменить, то возвращается ошибка "Illegal unquoted character ((CTRL-CHAR, code 13))". Когда экранирую символ с кодом 13, возвращается ошибка Illegal unquoted character ((... code 10)). То есть надо еще экранировать символ с кодом 10. Пробовал также заменять
Цитата:
$data = str_replace(chr(13),'\\\r',$_POST['data']);
$data = str_replace(chr(10),'\\\n',$data);

И в итоге возвращается ошибка {"error_message":"Input byte array has wrong 4-byte ending unit"}
Видимо, вопрос нужно адресовать в ЧЗ



т.е. ломаем base64, но писать в ЧЗ...

А просто убрать 13 и 10 коды из строки - нельзя?

Техническую поддержку оказываем тут
Наша база знаний
Offline voron29  
#7 Оставлено : 13 марта 2024 г. 10:50:20(UTC)
voron29

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

Группы: Участники
Зарегистрирован: 12.03.2024(UTC)
Сообщений: 4

Что значит ломаем? Из официальной документации ЧЗ, data - это "Подписанные УКЭП зарегистрированного участника оборота товаров случайные данные в base64 (присоединённая электронная подпись)"
Если убираю \r\n то возвращается ошибка проверки подписи
Offline Андрей *  
#8 Оставлено : 13 марта 2024 г. 11:36:38(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Автор: voron29 Перейти к цитате
Что значит ломаем? Из официальной документации ЧЗ, data - это "Подписанные УКЭП зарегистрированного участника оборота товаров случайные данные в base64 (присоединённая электронная подпись)"
Если убираю \r\n то возвращается ошибка проверки подписи


и примера того, что отправляется в ЧЗ не увидеть...
"Input byte array has wrong 4-byte ending unit" - не понятное описание?

Цитата:

$data = str_replace(chr(13),'\\\r',$_POST['data']);
$data = str_replace(chr(10),'\\\n',$data);


повторюсь - что делает есть понимание?

Я предлагал убрать все 13 и 10 из итоговой строки base64,
а не пытаться экранировать chr(13) этим '\\\r'
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.