Параметры хеширования для проверки запроса

У меня есть сервер сокетов, написанный на C++, и клиент API на PHP для регистрации новых пользователей в определенных местах. Чтобы проверить запрос от клиента PHP, я буду использовать хэш с HAMC с уникальным ключом, который известен только клиенту API и серверу сокетов.

Клиент PHP отправляет контент как JSON через HTTP POST, после чего Socket Server читает и обрабатывает его. Это нормально работает.

Теперь мои вопросы. У меня есть три поля, которые я буду хешировать: сообщение (строка) objectIDs (целочисленный массив) тип (строка)

Как я могу создать один хеш для этих трех полей? Когда я использую JSON, возможно ли, что строка JSON не имеет такой же сортировки в PHP и C++ (https://github.com/nlohmann/json) или больше вкладок, пробелов или чего-то еще?

И еще в качестве небольшой информации сообщение может содержать любые символы.

В настоящее время я использую это

$str = "type = ".$type. ";message = ".$message;
foreach ($objectIDs as $index => $objectID) {
    $str .= ";objectID[" . $index . "] = " . $objectID;
}
//generate from a String a SHA256 hash with HMAC
$hash = getSignature($str);

Кто-то говорит мне, что эта сигнификация не уникальна, и это должно быть возможно со специальным сообщением о том, что система создала неправильный хеш. (Но в настоящее время он недоступен) В своих тестах я не могу это воспроизвести. Теперь я надеюсь, что кто-то другой может мне помочь.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
366
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хэши равны, если равны строки.

То есть аспект того, что JSON - плохой выбор для хеширования, верен: семантически идентичные объекты JSON могут иметь разные строковые представления.

Однако в Интернете следует ожидать, что строковые представления могут быть сложными в зависимости от локали обоих задействованных компьютеров. Если локаль совпадает, обычно все нормально (везде допустим UTF-8). Однако я ожидаю, что PHP преобразует строки в локаль сервера. Это может изменить битовое представление строки (аналогично проблеме с JSON). Поэтому убедитесь, что оба работают в одной и той же локали и что такое волшебство никогда не может повлиять на вашу систему.

Спасибо, это подтверждает мои подозрения. Но как я могу создать для этого уникальный хеш?

Cyperghost 25.03.2018 22:04

Что ж, это куча работы. Поэтому либо убедитесь, что все компоненты используют одинаковую кодировку (например, utf8). iconv может помочь ... php.net/manual/de/function.iconv.php

user3640029 26.03.2018 14:46

Нет, я думаю, проблема не в кодировке. Моя проблема в том, что я должен могу отправить сообщение с примером ,, а затем хэш неубедителен. Сказал пользователь. Я жду, пока он не пришлет мне пример, о котором я его просил. Но спасибо за ответ.

Cyperghost 26.03.2018 16:28

Другие вопросы по теме