[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: повторение хэша
paul85
Задача сгенерировать хэш, вероятность повторения которого настолько мала, что за обозримое количество времени этого сделать невозможно в принципе.

Вот если я напишу примерно такое:
md5(openssl_random_pseudo_bytes(32));


Существует ли адекватная вероятность повторения через N итераций (берем, например, бесконечный цикл). И если существует, то каков порядковый номер этой "счастливой" итерации? Миллиард? Триллион? googol?

Кто хорошо знает криптографию, просветите плиз!
Michael
у md5 достаточно ограниченный набор алфавита. Можно придумать и лучше, с использованием всего алфавита англ. языка.

_____________
There never was a struggle in the soul of a good man that was not hard
paul85
Michael, я насчет криптографии не очень. А быть есть более эффективные алгоритмы из арсенала PHP?
Guest
paul85
SHA-512
Цитата (Michael @ 4.08.2013 - 08:39)
у md5 достаточно ограниченный набор алфавита. Можно придумать и лучше, с использованием всего алфавита англ. языка.

Lol what? Поищите про шестнадцатеричную системы счисления
Michael
Цитата (Guest @ 5.08.2013 - 07:30)
paul85
SHA-512
Цитата (Michael @ 4.08.2013 - 08:39)
у md5 достаточно ограниченный набор алфавита. Можно придумать и лучше, с использованием всего алфавита англ. языка.

Lol what? Поищите про шестнадцатеричную системы счисления

laugh.gif

Я о том и сказал, что в результате в хеше там будут только знаки из 16-ти ричной системы. Цифры и 6 букв. А можно и больше, 23 буквы англ алфавита например. wink.gif

p.s. Опять я смотрю Hello, под гостем, со своим негативом, который раз уже... Кто тебя обидел то хоть тут, что личико прячешь?

_____________
There never was a struggle in the soul of a good man that was not hard
Guest
Цитата (Michael @ 5.08.2013 - 09:34)
Я о том и сказал, что в результате в хеше там будут только знаки из 16-ти ричной системы
Цитата
Возвращает хэш в виде 32-символьного шестнадцатеричного числа.

raw_output
Если необязательный аргумент raw_output имеет значение TRUE, то возвращается бинарная строка из 16 символов.

Причем тут алфавит?
Michael
Цитата
Причем тут алфавит?

притом что нужно слушать о чем спрашивает ТС. А не пытаться умничать.

_____________
There never was a struggle in the soul of a good man that was not hard
paul85
А если я создам массив, который будет содержать в себе весь алфавит + цифры. А потом буду брать случайное число, сколько там получится элементов, ну скажем от 0 до 70. Случайное число - и есть индекс. Значение будет дописываться к строке, пока не заполнится до нужной длины.

Как в таком случае будет дело обстоять с повторениями? Получается что?
26 заглавных и 26 маленьких букв + 10 цифр = 62. Ну еще возьмем 8 каких-нибудь символов, для ровного счета = 70.

Всего ключ 32 байта. Правильно ли я понимаю, что это 70^32 комбинаций?

Насколько такой способ хорош?
Michael
Массив случайным образом чтобы перемешать, достаточно - shuffle
Плюс этот массив можно сначала размножить 2 раза, чтобы каждого символа по 2 раза встречалось.
И такие ключи будут, что в жизни не повторятся. smile.gif

_____________
There never was a struggle in the soul of a good man that was not hard
twin
Я бы на вашем месте смотрел не на md5. Количество вриантов у 32-значного шестнадцатеричного числа 16^32. Если попытаться перебрать все возможные комбинации на машине 3Ггц, пропуская по одной за такт, потребуется 3596761023602004729656 лет.

Этого с головой достаточно для подобной задачи. Не путайте уникальность со стойкостью к подбору коллизий.

А вот аргумент функции md5() явно с уникальностью подгулял. Вероятность выпадения двух одинаковых наборов байт в функции openssl_random_pseudo_bytes() равна 50%. Может выпасть, а может не выпасть. smile.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
paul85
twin, насколько я понял, md5 вполне достаточно для моей задачи. Хотя google, по-видимому, использует в качестве генератора ключей либо "мой" способ, либо способ, который предложил Michael. Об этом говорит и длина ключа (что-то 288 байт кажется) и словарь. Хотя вероятнее там более серьезные алгоритмы. Не в этом дело. Главное где взять уникальную строку, от которой брать md5?

Michael, если делать shuffle, то количество различных ключей - будет факториал. Если взять 1 раз массив это
70!
что существенно меньше 70^70. Но мы ведь берем часть, как бы, большого ключа... Поэтому разница может быть и не столь велика, но ИМХО все-равно будет.
twin
Самый простой способ - время (microtime). Плюс какой-нибудь счетчик, если есть вероятность генерации двух ключей одновременно. Или блокировку.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
DarkLynx
http://php.net/manual/ru/function.uniqid.php
Это к вопросу об уникальности ключа
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.