Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: нужна взаимообратная функция

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: для формирования красивого номера заказа
DlTA
Отправлено: 21 Октября, 2011 - 09:44:12
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




ну в общем то имеем магазинчик
когда производят заказ хотелось бы клиенту возвращать номер заказа
но вот возвращать чистый id заказа очень не хочется
ибо в данном случае есть возможность мониторинга из вне число заказов в магазине, а это плохо!

так вот может кто подскажет взаимообратную функцию (надо же еще и по номеру заказа доступ к нему получить) формирующая 5-7 циферный набор символов.
 
 Top
EuGen Администратор
Отправлено: 21 Октября, 2011 - 09:49:19
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




DlTA пишет:
ибо в данном случае есть возможность мониторинга из вне число заказов в магазине, а это плохо!

Так как взаимообратная функция отобразит множество значений id в равномощное множество своих значений, то проследить количество можно будет все равно.

Если нужна криптостойкая функция, используйте стандартные алгоритмы шифрования.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DlTA
Отправлено: 21 Октября, 2011 - 10:20:25
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




EuGen пишет:
проследить количество можно будет все равно.

я таки надеюсь на фукцию позволяющая получить такие значение
что для рядового пользователя данная работа будет не под силу

а те кто поумнее, подозреваю пойдут другим путем, нацеливаясь уже на саму базу сайта
 
 Top
EuGen Администратор
Отправлено: 21 Октября, 2011 - 10:23:48
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Так нет, Вы поймите - если Вам нужно скрыть именно число заказов, то идея неверная.
Приведу пример.
Предположим, что у Вас есть множество значение id от 1 до 10:
1,2,3,4,5,6,7,8,9,10
(то есть мощность этого множества и равна 10), а взаимообратная функция просто умножает на 100 (то есть обратная к ней будет делить на 100), превращая id в ненастоящие.
Но тем не менее у Вас будет множество
100, 200, 300,400,500,600,700,800,900,1000
- очевидно, число его элементов от применения такой функции не изменится.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LIME
Отправлено: 21 Октября, 2011 - 10:36:31
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




d1d2d3d4d5 -id
например результат- d1d2d3x5d4x3d5(x4+5)
где x[$i]=d[$i]
если последняя цифра меньше 5 значит после сложения прибавился разряд
придумано навскидку
(Добавление)
хотя лучше сменить нумерацию на "с конца"
чтобы при увеличении разряда id алгоритм не менялся
(Добавление)
и вопрос
есть ли какие-то стандартные алгоритмы в пхп чтоб из d только d получались

(Отредактировано автором: 21 Октября, 2011 - 10:42:05)

 
 Top
DlTA
Отправлено: 21 Октября, 2011 - 10:54:56
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




EuGen пишет:
1,2,3,4,5,6,7,8,9,10
(то есть мощность этого множества и равна 10), а взаимообратная функция просто умножает на 100 (то есть обратная к ней будет делать на 100), превращая id в ненастоящие.
Но тем не менее у Вас будет множество
100, 200, 300,400,500,600,700,800,900,1000

спасиб за ткание носом
можно воспольоваться функцией шифрование с открытым ключем
вот пример работы:
Спойлер (Отобразить)

честно говоря прям так на глаз зависимость сложно найти
а вот сам код:
Спойлер (Отобразить)


подозреваю что скажите "ересть, вскрывается на ура"
да, вполне возможно, но с другой стороны, любой замок это прежде всего расчет на то что злоумышленник не знает его внутренних параметров.
 
 Top
LIME
Отправлено: 21 Октября, 2011 - 10:58:39
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




DlTA неа
тут используется рандом
а значит если во второй раз открыть заказ вы не сможете вывести тот же номер
нельзя же на куки уповать
 
 Top
DlTA
Отправлено: 21 Октября, 2011 - 11:05:58
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




LIME пишет:
неа
тут используется рандом
а значит если во второй раз открыть заказ вы не сможете вывести тот же номер

так к кто сказал что надо при каждом открытии заказа генерить заново
суть вопроса в том чтоб клиенту пересылать крассивый номер
а в нутри сайта привязка к id заказа
кстати сам номер можно сохранять как еще одно поле заказа
 
 Top
LIME
Отправлено: 21 Октября, 2011 - 11:13:28
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




DlTA пишет:
кстати сам номер можно сохранять как еще одно поле заказа
не кажется что в этом случае таблица будет избыточной?
тогда есть смысл убирать нафиг id и работать с генерированным полем как с первичным ключем ))
(Добавление)
+ это еще 1 защита от коллизий
если такой ключ уже сгенерен то генерить еще раз
(Добавление)
DlTA пишет:
кто подскажет взаимообратную функцию
ктомуже так было спрошено ))
 
 Top
EuGen Администратор
Отправлено: 21 Октября, 2011 - 11:27:56
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Думаю этого должно хватить:
PHP:
скопировать код в буфер обмена
  1. function simpleCrypt($mData, $x)
  2. {
  3.    return $mData ^ $x;
  4. }
  5.  
  6. function simpleDecrypt($mData, $x)
  7. {
  8.    return $mData ^ $x;
  9. }
  10.  
  11. $x=7325632463;
  12.  
  13. $foo=18;
  14. $bar=simpleCrypt($foo, $x);
  15. $baz=simpleDecrypt($bar, $x);
  16.  
  17. var_dump($foo, $bar, $baz);

Можно обернуть все в класс и скрыть там значение применяемой маски ($x). Числом разрядов маски можно регулировать длину получающегося значения.
В данном случае функция является обратной сама к себе (и таким образом определение второй функции сделано только для наглядности, она в принципе не обязательна)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Stierus Супермодератор
Отправлено: 21 Октября, 2011 - 12:28:56
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




обычно в базе данных есть отдельное поле "номер заказа", не равный автоинкрементальному полю.

Если не катит добавить 1 поле в бд - попробуйте сделать автозамену - приводите id к двоичному виду, сдвигайте, приводите к шестнадцатеричному, заменяйте E на А, С на F, например и тд ... заменили 2 символа - в конце добавляете 2xy, где x и y - позиции замененных цифр, после этого конвертите в десятичную форму ... если такую муть кто-то будет расшифровывать - то вам явно надо переходить к доп. полю в бд, ибо ваш бизнес крайне велик и привлекателен для жуликов Улыбка

да, еще 1 шикарнейший способ - не требует нового поля, основан на бд - вычисляйте номер заказа за день Улыбка. Выбираете, какой он по счету в выборке, отсортированной по дате создания(заказа), отфильтрованных на сегодня. если не хотитепоказывать количество заказов за день - выбирайте за месяц и домножайте на 123 ... в любом случае, человеку, не знающему схемы работы, эти цифры не будут говорить ни о чем
 
My status
 Top
DlTA
Отправлено: 21 Октября, 2011 - 12:45:31
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




в общем суть понятна
для получения реально красивого числа
нужно работать не только как с числом но добавлять хитрую строковую обработку

всем спасибо
 
 Top
DlTA
Отправлено: 21 Октября, 2011 - 15:54:06
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




а как строчку типа "011011010101" преобразовать в десятичное значение??
 
 Top
EuGen Администратор
Отправлено: 21 Октября, 2011 - 15:56:41
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Если имеется ввиду именно строка (а не бинарный набор), то это:
http://php.su/functions/?base_convert


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
LIME
Отправлено: 21 Октября, 2011 - 18:26:06
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Stierus пишет:
приводите id к двоичному виду, сдвигайте,
но ведь при этом тоже невозможна обратная конвертация
или я ошибаюсь
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Прочее »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB