Есть наборы объектов с полями на клиенте и сервере -> название объекта -> код 10 цифр -> код 10 цифр (N штук)
.. -> код 15 цифр -> код 15 цифр (M штук)
..
Объекты хранятся на клиенте и сервере как частично (на 90%) пересекающиеся множества.
если бы наборы были полностью идентичны, синхронны, то N=M
и каждому коду 10 цифр есть однозначное соответствие кода 15 цифр.
Но наборы не синхронны.
Коды 10 цифр присваиваются при создании объектов на клиенте, они всегда есть, их кол-во от 1 до N, они разные.
(при инициализации на клиенте кодов 15 цифр нет)
Коды 10 и 15 цифр присваиваются при создании объектов на сервере, они всегда есть, их кол-во попарно равны.
Клиент Коды 15 цифр получают по сети передав в открытом виде Название объекта на сервер
Коды 10 цифр по сети не передаются
На сервере, это известно, код 15 цифр получают каким-то (неизвестным) преобразованием или шифрованием из 10 цифр кода
и возможно + имении объекта
Клиент, передав на сервер код 15 цифр -> затем сервер однозначно устанавливает Название объекта и соответствующий парный код 10 цифр
и производит запуск каких-то процедур. Каких — клиент не важно.
Задача: На клиенте, как проверить наличие пары код 15 и код 10 цифр данного объекта на сервере не запрашивая сервер?
Предварительно получив от сервера код 15 цифр, но без указания для какого кода 10 цифр это пара?
Было предложено в добавок к 15 цифр коду чтобы с сервера один раз передавался еще и CRC для каждого кода 10 цифр
или что-то подобное необратимое из известных публичных открытых алгоритмов,
тогда на клиенте по коду 10 цифр (он есть на клиенте изначально, дается при создании объекта на клиенте)
вычисляем crc и сравниваем с crc от сервера.
Однако ввиду коротких последовательностей код 10 цифр и 15 цифр возможно на клиенте перебором получить все пары код 10 — код 15 цифр.
И посторонний клиент сможет сразу по коду 15 цифр получать и код 10 цифр, чего никак не должно быть
тогда было предложено усовершенствование на оценку 3-
Взять такой СКС чтобы он давал множество коллизий. кажем 1000-10000 на наборе 10 цифр,
тогда подбор будет давать множественные ошибочные пары код10 — код15 и ущерб вероятно может быть снижен до приемлем уровня..
Понимаю, что все это криво, но все же посоветуйте что-нибудь правильное!
(заново систему спроектировать нельзя)
Здравствуйте, paradok, Вы писали:
P>Коды 10 цифр по сети не передаются P>На сервере, это известно, код 15 цифр получают каким-то (неизвестным) преобразованием или шифрованием из 10 цифр кода P>и возможно + имении объекта
Ну если включить режим телепата, то можно предположить что исходное число 10знаков это 32битное целого (0..4294967295)
То 15 знаков для передачи можно получить с помощью кодов для восстановления ошибок
[B0 B1 B2 B3 B4 B5 B6 B7] => [B0 B1 B2 B3 B4 B5 B6 B7 | P0 P1 P2 P3] и так 4 раза, где P0..P3 -- это четности B0..B7 с разным шагом
32bit -> 48bit с возможностью восстановления до 1-го бита в каждом байте
ps: а вообще вариантов чуть более чем немерено да и постановка задачи не внятная
Re[2]: Строка 10 цифр -> код 15 цифр - чтобы перебором нельзя раск
Здравствуйте, kov_serg, Вы писали:
_>Здравствуйте, paradok, Вы писали:
P>>Коды 10 цифр по сети не передаются P>>На сервере, это известно, код 15 цифр получают каким-то (неизвестным) преобразованием или шифрованием из 10 цифр кода P>>и возможно + имении объекта
_>Ну если включить режим телепата, то можно предположить что исходное число 10знаков это 32битное целого (0..4294967295) _>То 15 знаков для передачи можно получить с помощью кодов для восстановления ошибок _>[B0 B1 B2 B3 B4 B5 B6 B7] => [B0 B1 B2 B3 B4 B5 B6 B7 | P0 P1 P2 P3] и так 4 раза, где P0..P3 -- это четности B0..B7 с разным шагом _>32bit -> 48bit с возможностью восстановления до 1-го бита в каждом байте
_>ps: а вообще вариантов чуть более чем немерено да и постановка задачи не внятная
да, весьма вероятно, но данных нет.
С удовольствием увеличу внятноть! Подскажите что уточнить?
Re[3]: Строка 10 цифр -> код 15 цифр - чтобы перебором нельзя раск
Здравствуйте, kov_serg, Вы писали:
_>Здравствуйте, paradok, Вы писали:
P>>С удовольствием увеличу внятноть! Подскажите что уточнить? _>Примеры с данными могли бы внести ясности.
Запрос на сервер от клиента
Сделать_работу_для:
имя_объекта=объект_1
и код15 = 120845289104737
Ответ сервера:
Ок (невидимо: сделана работа для объекта_1 с код10=0987654321)
----- пока все было хорошо -----------
----- но есть второй сервер в локальной защищенной сети на который могут посылаться и код10 и код15 ------------
Запрос на сервер от клиента
Сделать_работу_для:
имя_объекта=объект_1
и код15 = 120845289104737, код10=1234567890, код10=0987654321
------ это плохо ----
2 раза выполнится одна и таже работа для 1 и 3 параметра.
----- задача — избежать этого или снизить вероятность этого ----
----- трудность ---- на клиенте нет однозначного соответствия между коды10 и коды15