![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
топик
-------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: нет Всего: 70 |
Настолько, насколко уникален хеш от неповторяющихся занчений числа(если конечно время не подкручивать
![]() |
|||
|
||||
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
то есть можно смело использовать эту конструкцию для генерации имён файлов, которые складируются в одну папку и не бояться возможности остаться без какого-то файла?
-------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Лучше использовать uniqid(). Он генерирует уникальные значения так же с использованием микровремени, но значение более уникальным получается.
|
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 5 Всего: 360 |
||||
|
||||
Garret |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 16.9.2006 Где: Киев Репутация: нет Всего: 2 |
Если файлов не пара миллионов то вероятность совпадения мизерная.
|
|||
|
||||
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
а можете привести две даты, md5 hash которых будет идентичен?
![]() -------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 5 Всего: 360 |
Честно сказать, нет ни желания, ни возможности. В криптографии такое называется "birthday attack". Вероятность, что в группе людей найдётся человек у которого день рождения совпадает с твоим мыла, но вероятность того, что в этой группе есть два человека с одинаковым ДР - достаточна велика. т.е вероятность, что найдёшь число дающее заданный хэш мала, но найти два, которые дают любой одинаковый - значительно больше. хэш у нас 128 бит, значит 2^128 различных значений, значит за 2^129 секунд у тебя будет в среднем "пропадёт" половина файлов.
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Значений md5 - 16^16, если не изменяет память.
Значений microtime сосчитать практически нереально, т.к. дробна часть может быть разной (где-то 10^10 также) для 10^10 значений микротайм до текущей даты (приблизительно). Так что вероятность - считай-те сами. Вероятность повтора ничтожна мала, учитывая принципы статистики, это даже под закон больших чисел не подпадает, так что 0. |
|||
|
||||
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
а насколько уникально uniqid()? можно ли его без опасения использовать для имён файлов?
![]() -------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Mal Hack,
Разве есть разница, какие аргументы переданны md5? На сколько я понимаю, разницы не какой в том плане, что если значений md5 - 16^16, то оно и будет 16^16, какие бы значения через него не пропускали. И того 18 446 744 073 709 551 616 комбинаций. Да вероятность совпадения ничтожно мала, но я считаю, что тут в целом задействован тот же принцип рандома, а на сколько коварен рандом знает наверно каждый, кто с ним пробывал хотя бы раз работать... Поэтому не исключенно, что система будет работать, но в один прекрасный день, после запуска скрипта прозойдет даже более одного совпадения... рандом, что тут поделаешь... Добавлено через 2 минуты и 27 секунд ![]() Если бы рескнули играть в русскую рулетку из револьвера с 18 446 744 073 709 551 615 пустыми ячейками и 1 полной, то используйте этот метод, я бы не извращался и сэмулировал AUTO_INCREMENT. |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Разницы, конечно, нет. Я имею ввиду то, что возможных параметров для md5 может быть больше чем число возможных результатов выполнения функции. Т.е. фактически это как выливание воды из ведра, когда оно заполнено, а ты туда льешь. а какая разница, через md5 жу пропускать будешь, то все равно теже 16^16. |
|||
|
||||
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
нет, а если не через md5() пропускать, насколько уникально uniqid()?
-------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
HackMan, если файлы не будут создаваться чаще, чем раз в секунду (или будет применена блокировка, чтобы такого не произошло) то для имени файла вполне подойдет date().
|
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 5 Всего: 360 |
лана
![]() Это убивает практически любую коллизию, потому что для коллизии необходимо, чтобы две строки одновременно дали один хэш. Ну это может произойти только если файлы одинаковы, а это нам даже пофиг. Конечно вероятность коллизии и тут нулю не равна, но значительно меньше чем у просто мд5. Для уникальности можно ИП клиента присобачить, и/или его ник. Тогда уж точно пересечений не будет. а uniqueid базируется на времени, точнее на миллисекундах. Именно поэтому в функцию рекомендуется передавать доп. аргумент-prefix. Дело не в том, что мд5 плохой, а в том, что надо себе отчёт отдавать, что от коллизий никто не застрахован. |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: 1 Всего: 5 |
microtime() - уникальность в 1 миллисекунду на 1 помпе
|
|||
|
||||
sTa1kEr |
|
||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Можете смело использовать в качестве имен файлов конструкцию uniqid(rand(), true); Если есть сомнения в уникальности, то запустите простенький скрипт (потребуется много памяти)
Т.е. 1000000 значений, генерированных за ~10 секунд полностью уникальны. В реальной же ситуации вряд-ли будет создаваться больше 1000000 файлов за 10 секунд, т.ч. можно пользоваться этой функцией не опасаясь повторений. |
||||
|
|||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: 1 Всего: 5 |
Кстати есть стандартная функция генерации уникального имени файла.
|
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Если вы про tempnam(), то она не имя файла генерирует, а создает файл с уникальным именем. Эта функция предназначена для создания временных файлов и при работе с постоянными файлами, могут возникнуть некоторые казусы, на пример, файл создастся во временной директории. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 5 Всего: 360 |
||||
|
||||
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
Спасибо!
понятно, автоинкримент - самый надёжный способ ![]() Это сообщение отредактировал(а) HackMan - 14.8.2007, 01:39 -------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: 1 Всего: 5 |
HackMan, +1
И не говори, а они что то новое хотят ![]() |
|||
|
||||
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
Просто есть такое понятие, как "закон подлости"
![]() У меня может ни разу не совпасть md5, а у заказчика 10 одинаковых значений подряд будет ![]() -------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
SamDark |
|
|||
![]() Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: 10 Всего: 38 |
HackMan,
Ну попользуйте SHA1, если опасаетесь... можно ещё какую-нибудь случайность влепить в параметр вроде рандомно генерящегося int-а... Это сообщение отредактировал(а) SamDark - 14.8.2007, 17:04 -------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: 1 Всего: 5 |
Влепи дату + час (час, минута, секунда, миллисекунда) + пользователь. Уникальность гарантирую. И не надо хешировать.
|
|||
|
||||
SamDark |
|
|||
![]() Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: 10 Всего: 38 |
Diesel Draft,
Всё-равно обрабатывать надо. Это же для имени файла... -------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
Diesel Draft |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: 1 Всего: 5 |
В таком случае в Base64. Принайми я вот так вчера сделал з кеш. У меня там два метода:
Вот так вот создаю имя:
Это сообщение отредактировал(а) Diesel Draft - 14.8.2007, 18:01 |
||||
|
|||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 5 Всего: 360 |
В Base64 возможен знак равно.
|
|||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: 1 Всего: 5 |
Да, в конце. Это разве плохо? у меня работает з ним нормально.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |