Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 1
Регистрация: 26.01.2013
Сообщений: 19

Байтовое представление

15.07.2013, 00:01. Показов 2739. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди добрые, помогите.
При подключении платежной системы одной частью является получение какого-то байтового представления хеша md5.
Что это такое я понять не могу. Гугл тоже ничего толком не выдает. Подскажите кто что знает.
Вот полностью предложение из документации API:
Полученое после объединения параметров и «секретного ключа» значение, представленное в кодировке Windows-1251, хешируется выбранным методом формирования ЭЦП и его байтовое представление кодируется в Base64.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2013, 00:01
Ответы с готовыми решениями:

Разбить 2 байтовое число
Добрый день. Необходимо разделить полученное 2 байтовое число. Формата 649F. Разделить это число на байты. Каждое байтовое число, выводить...

Байтовое хранилище данных
Привет, народ. Есть задача - в руки мне даётся структура, предназначенная для хранения байтового массива. Заполнять массив можно...

2х байтовое HEX число в одно
Подскажите как из 2х байтового HEX числа сделать одно - пример: 0х03 и 0х0Е8 в одно 0х03Е8.

14
16 / 16 / 8
Регистрация: 14.01.2013
Сообщений: 545
Записей в блоге: 2
15.07.2013, 00:09
Это Хеш твоя) Зашифрованная строка, или пароль.
0
1 / 1 / 1
Регистрация: 26.01.2013
Сообщений: 19
15.07.2013, 00:13  [ТС]
Пробовал просто хеш MD5 (мой метод формирования ЭЦЛ) загонять сразу в base64, в итоге с ихним ключем не сходится, значит все таки загонять в Base64 нужно "байтовое представление", а что это такое, я ума не приложу...
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
15.07.2013, 00:21
http://php.net/manual/ru/function.pack.php Вам в помощь
0
16 / 16 / 8
Регистрация: 14.01.2013
Сообщений: 545
Записей в блоге: 2
15.07.2013, 00:23
)
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
15.07.2013, 00:23
то есть либо так
PHP
1
base64_encode(pack('h*', md5(...)));
либо вместо h нужно H
0
1 / 1 / 1
Регистрация: 26.01.2013
Сообщений: 19
15.07.2013, 01:02  [ТС]
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
то есть либо так
PHP
1
base64_encode(pack('h*', md5(...)));
либо вместо h нужно H
Изначально именно так в скрипте и прописывал.
Тогда не понимаю в чем может быть ошибка.
В документации указано:
Для того, чтобы убедиться, что запрос поступил от Единой кассы и поступившей информации можно доверять, интернет-магазину необходимо вычислить цифровую подпись запроса с использованием своего «секретного ключа» и сравнить ее с параметром WMI_SIGNATURE, полученным в запросе.

Сделать это можно по алгоритму, описанному в разделе «Защита платежной формы», объединив все значения параметров запроса (кроме WMI_SIGNATURE) в алфавитном порядке их имен с «секретным ключем» интернет-магазина и вычислив хеш-отпечаток этого значения выбранным методом формирования ЭЦП.
Вот то, что мне отправляется в обработчик:

Вот кусок кода обработчика:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$skey = "WnxtdXV6aEFnNl5nMVZJTTliTXg5TH9zenJf";
//Свожу все данные в одну строку по алфавиту, как указано в документации
$values = $values.$_POST["WMI_AUTO_ACCEPT"];
$values = $values.$_POST["WMI_CREATE_DATE"];
$values = $values.$_POST["WMI_CURRENCY_ID"];
$values = $values.$_POST["WMI_DESCRIPTION"];
$values = $values.$_POST["WMI_EXPIRED_DATE"];
$values = $values.$_POST["WMI_FAIL_URL"];
$values = $values.$_POST["WMI_MERCHANT_ID"];
$values = $values.$_POST["WMI_NOTIFY_COUNT"];
$values = $values.$_POST["WMI_ORDER_ID"];
$values = $values.$_POST["WMI_ORDER_STATE"];
$values = $values.$_POST["WMI_PAYMENT_AMOUNT"];
$values = $values.$_POST["WMI_PAYMENT_NO"];
$values = $values.$_POST["WMI_PAYMENT_TYPE"];
$values = $values.$_POST["WMI_SUCCESS_URL"];
$values = $values.$_POST["WMI_TO_USER_ID"];
$values = $values.$_POST["WMI_UPDATE_DATE"];
$values = $values.$skey;
 
// Формирование подписи для сравнения ее с параметром WMI_SIGNATURE
$signature = base64_encode(pack("H*", md5($values)));//
 
 
//Сравнение полученной подписи с подписью W1
 
if ($signature == $_POST["WMI_SIGNATURE"])
{
//Оплата прошла
}
В итоге у меня получается строка 24ти символьная, с их сервера приходит 30 символьная.
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
15.07.2013, 01:08
Там же даже готовый код, именно pack и используется.
0
1 / 1 / 1
Регистрация: 26.01.2013
Сообщений: 19
15.07.2013, 01:12  [ТС]
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Там же даже готовый код, именно pack и используется.
Так я же не спорю.
Я изначально просто тупо вставил их готовый код. Ничего хорошего из этого не вышло, строки не совпадали.
Потом я решил что там у них ошибка и начал писать все заново. Из этого тоже ничего не получилось.
Строку, которая формируется сливанием всех переменных из POST запроса я проверил, сверил ее с кодом формы отправки (на скриншоте). Раз не сходится значит два варинта: либо я не верно получаю $signature, либо у них в документации ошибка.
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
15.07.2013, 01:16
Цитата Сообщение от maksim4ik Посмотреть сообщение
строки не совпадали.
Что значит не совпадали?
Вам по идеи только ключ свой вписать надо в том коде, и всё должно работать.
0
1 / 1 / 1
Регистрация: 26.01.2013
Сообщений: 19
15.07.2013, 01:28  [ТС]
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Что значит не совпадали?
Вам по идеи только ключ свой вписать надо в том коде, и всё должно работать.
Сейчас вот просто скопировал тот код, вставил вверху ключ, в итоге выдается ошибка что ключи не совпадают.
Вывел оба ключа:
Мой: 5OevfztjZ+JMQZFe4F8oPA== (24 символа)
Пришедший от биллинга: 8ZtR7KDMu%2b4JWffnROvWXQ%3d%3d (30 символов)
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
15.07.2013, 01:40
судя по
Цитата Сообщение от maksim4ik Посмотреть сообщение
%2b
Цитата Сообщение от maksim4ik Посмотреть сообщение
%3d
Вам нужно ещё urldecode сделать для полученных данных.

выведите другие данные, посмотрите, может для всех нужно, по этому и не совпадает код.

Добавлено через 1 минуту
и кодировку проверьте, если у Вас UTF-8 то по идеи вам нужно убрать iconv
0
1 / 1 / 1
Регистрация: 26.01.2013
Сообщений: 19
15.07.2013, 01:48  [ТС]
Да, после применения urldecode подпись имеет вид: 8ZtR7KDMu+4JWffnROvWXQ== (24 символа, как и моя)
Кодировка UTF-8, но iconv на результат не влияет вообще никак.
Уже что-то более менее получается, но все равно не то...
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
15.07.2013, 01:52
а это?
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
выведите другие данные, посмотрите, может для всех нужно
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
urldecode сделать
0
1 / 1 / 1
Регистрация: 26.01.2013
Сообщений: 19
15.07.2013, 01:56  [ТС]
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
а это?
Да, действительно. Что-то я сразу в ваши слова не вник, а ведь заметил же что в каком-то не очень правильном виде параметры идут, когда еще скриншот делал...

Спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.07.2013, 01:56
Помогаю со студенческими работами здесь

Найти сумму абсолютных величин(1 байтовое поле )
Помогите исправить чтоб работал с DB(1 байтовое поле).:) Просто заменив на DB не срабатывает :-| SGSTACK SEGMENT PARA STACK 'STACK' ...

вывести 1 байтовое целое знаковое число в 2-ом коде
вывести 1 байтовое целое знаковое число в 2-ом коде с использованием двоичной маски-без деления.

Вывести 1 байтовое целое число без знака в двоичном коде
1. вывести 1 байтовое целое число без знака в 2-ом коде а) с использованием операции деления, б) с использованием двоичной маски - без...

Вывести 4-ех байтовое максимально приближенное значение экспоненты. Компилятор TASM
Всем добрый вечер. Задача: приблизительное вычисление экспоненты. Вывести ее 4-ех байтовое максимально приближенное значение. Компилятор...

Если известно десятичное представление числа 255, 7, то его двоичное представление
1. 11111111, 0111 2. 111111111,1110 3. 11111111, 111 4. FF, 3 5. 255, 111


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru