![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: May 2012
Сообщений: 131
|
Доброго времени суток.
Обращаюсь к Вам, т.к. уже несколько часов промаялся с этим. Суть происходящего. На сервере(php-скрипт) - формирую ответ - строку.
Далее в клиенте парс строки в объект c тремя ключами. Причём, первый ключ - сам по себе тоже объект. Что-то вроде такого получается var response:Object = JSON.parse(e.target.data); //где response.key1 - объект //response.key2 - значение времени //response.key3 - сигнатура от двух первых ключей, сделанная на сервере Столкнулся с тем, что после парса - меняется положение ключей в объекте key1. Он становится не Соответственно, дальнейшие проверки на "правильность" сигнатуры - бессмысленны, т.к. строка от key1 - уже другая. Собственно, вопроса два. 1) как это можно побороть? 2) есть ли какой-нибудь алгоритм составления? Алфавитный порядок/ число символов в ключе - чтобы составляя ответы сервера - можно было хотя бы заранее расставить всё в нужном порядке, чтобы клиент их не перетасовал в другом. |
|
|||||
|
Регистрация: May 2012
Сообщений: 131
|
я бы и рад, но MD5 - криптит строку. А клиент не даёт её собрать вновь.
|
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Криптите только элементы своего ассоциативного массива.
|
|
|||||
|
Регистрация: May 2012
Сообщений: 131
|
Т.е. сначала создавать массив из значений, криптить их в нужной очередности, а потом из этих же элементов составлять строку?
UPD: так-то это ничего не даст, потому что количество value в первом ключе - может быть разным. А перебирать все случаи - это глупо. Последний раз редактировалось Frost47rus; 21.05.2012 в 04:08. |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Ничо не понял. И проблемы не понял.
|
|
|||||
|
Регистрация: May 2012
Сообщений: 131
|
Цитата:
А клиент флеш примет его вот так: {"key1":{"message":"login", "value1":2}, "key2":1337568049, "key3":"69efd29eb68d9f35fad49ef7e78616b5"} {"message":"login", "value1":2} или {"value1":2, "message":"login"} Соответственно, приведение уже распарсенного объекта key1 к строке - будет в 50% случаев строкой, отличной от той, что была на сервере. (и это только при наличии двух значений в ключе). Проблему решил, вручную перебрав максимальное количество значений в первом ключе. Если придумаю более оригинальное решение - напишу. serverData = JSON.parse(e.target.data); var str:String = new String(); str+=serverData.key1.message; if (serverData.key1.value1) { str += serverData.key1.value1; } if (serverData.key1.value2) { str += serverData.key1.value2; } if serverData.(key1.value3) { str += serverData.key1.value3; } if (serverData.key1.value4) { str += serverData.key1.value4; } if (serverData.key1.value5) { str += serverData.key1.value5; } if (serverData.key3 != MD5.encrypt(str+serverData.key2)) { var k:Object = new Object(); k.message = 'Cheat Detected'; banThatBitch(); loader.close(); errorFunc(k); return; } //нет подмены |
|
|||||
|
Если важен порядок - надо использовать JSON массив. А от, что вы хотите - хотеть от JSON в принципе нельзя.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 01:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|