Loading...
Обучение/Помощь новичкам | Два одинаковых хэша
Один человек говорит что может быть два одинаковых хэша, другой говорит что доктора стренджа не существует, что crypt не выдаст microtime() в связке с rand () дубликат хэша через пол года, или лет 5.
Вопросы так же и остались может быть ли 2 одинаковых хэша ? Зайду на перед задам ещё вопрос, как обработать в php если выдал дубликат чтобы не выбрасывать ошибку в виде условия "извините но такой хэш есть попробуйте ещё раз может вам повезёт"? Если в таблице хэшу присвоен уникальный идентификатор ?

php
$key = microtime().rand();
$hash = crypt($key, '$2y$10$'.substr($key, 0, 22));

________
посл. ред. 14.08.2023 в 19:30; всего 2 раз(а); by SNEG
SNEG (14 авг 2023, в 19:27)
Один человек говорит что может быть два одинаковых хэша, другой говорит что доктора стренджа не существует, что crypt не выдаст microtime() в связке с rand () дубликат хэша через пол года, или лет 5.
Вопросы так же и остались может быть ли 2 одинаковых хэша ? Зайду на перед задам ещё вопрос, как обработать в php если выдал дубликат чтобы не выбрасывать ошибку в виде условия "извините но такой хэш есть попробуйте ещё раз может вам повезёт"? Если в таблице хэшу присвоен уникальный идентификатор ?

php
$key = microtime().rand();
$hash = crypt($key, '$2y$10$'.substr($key, 0, 22));
Можешь реализовать так
php
$key = uniqid(mt_rand(), true);
$hash = crypt($key, '$2y$10$' . substr(md5($key), 0, 22));
Foxsa , это я знаю про uniqid, факт дубликат хэша интересует . md5 не вижу смысла мусор прикручивать это по другому делается ))
________
посл. ред. 15.08.2023 в 00:13; всего 3 раз(а); by SNEG
Первая часть поста - да, возможно
Вторая часть поста - не выводи ошибку, а обработай её, сгенерировав новый хэш
TheAlex [!] (14 авг 2023, в 23:39)
Первая часть поста - да, возможно
Вторая часть поста - не выводи ошибку, а обработай её, сгенерировав новый хэш
Покажи мне в своей практике, где встречал такое
Или почитать в интернете и сделать вывод, на основе того, что в жизни не видел, это нормально?
SNEG , ты слишком сильно в этом паришься)
Шанс совпадения равен 0 и точка. Для совпадения требуется около млрд запросов в 1 сек, тогда может и совпадёт 1 пара.
Лара (15 авг 2023, в 0:29)
Покажи мне в своей практике, где встречал такое
Или почитать в интернете и сделать вывод, на основе того, что в жизни не видел, это нормально?
Я не читал в интернете. Ты слишком агрессивный, причём, как правило, пользы от твоих высеров нет. Человек спросил возможно это или нет. Я ответил, что возможно. Будет у него на практике так - без понятия, меня это не сильно волнует. Учись отвечать на вопросы по существу, а не агрить на всё подряд. Однако, если ты работаешь с мелкопроектами и для тебя вариант "и так сойдёт, а может прокатит" вполне норм, то, думаю, не стоит раздавать советы другим.
Хэш-функции обычно разрабатываются таким образом, чтобы минимизировать возможность коллизий (ситуации, когда двум разным входным данным соответствует один и тот же хэш). Однако, абсолютно исключить коллизии невозможно из-за ограниченного размера хэша и бесконечного количества входных данных. Таким образом, в теории, двум разным входам может быть присвоен одинаковый хэш.

В вашем примере кода, вы используете входные данные, включающие метку времени и случайное число для генерации хэша. Это уменьшает вероятность коллизий, но не исключает их полностью.

Если вы сталкиваетесь с ситуацией, когда хэш-значение уже существует в вашей таблице, вы можете обработать это следующим образом:
php
$key = microtime().rand();
$hash = crypt($key, '$2y$10$'.substr($key, 0, 22));

// Проверяем, существует ли хэш в таблице
if (hashExistsInDatabase($hash)) {
// Генерируем новый хэш и повторяем проверку
$key = microtime().rand();
$hash = crypt($key, '$2y$10$'.substr($key, 0, 22));

if (hashExistsInDatabase($hash)) {
// Если повторно сгенерированный хэш также уже существует, выполните необходимые действия
// например, вы можете выбросить ошибку или предоставить пользователю новый шанс ввода.
} else {
// Используйте новый хэш, так как он уникален
}
} else {
// Используйте сгенерированный хэш, так как он уникален
}

// Функция для проверки существования хэша в базе данных
function hashExistsInDatabase($hash) {
// Реализуйте эту функцию в соответствии с вашей системой базы данных
// Она должна вернуть true, если хэш уже существует, и false в противном случае
}

В данном примере кода, если сгенерированный хэш уже существует в базе данных, вы пробуете сгенерировать новый хэш и повторяете процесс. Если новый хэш также уже существует, вы можете предпринять необходимые действия в зависимости от контекста.
[i] [!] (15 авг 2023, в 14:00)
Хэш-функции обычно разрабатываются таким образом, чтобы минимизировать возможность коллизий (ситуации, когда двум разным входным данным соответствует один и тот же хэш). Однако, абсолютно исключить коллизии невозможно из-за ограниченного размера хэша и бесконечного количества входных данных. Таким образом, в теории, двум разным входам может быть присвоен одинаковый хэш.

В вашем примере кода, вы используете входные данные, включающие метку времени и случайное число для генерации хэша. Это уменьшает вероятность коллизий, но не исключает их полностью.

Если вы сталкиваетесь с ситуацией, когда хэш-значение уже существует в вашей таблице, вы можете обработать это следующим образом:
php
$key = microtime().rand();
$hash = crypt($key, '$2y$10$'.substr($key, 0, 22));

// Проверяем, существует ли хэш в таблице
if (hashExistsInDatabase($hash)) {
// Генерируем новый хэш и повторяем проверку
$key = microtime().rand();
$hash = crypt($key, '$2y$10$'.substr($key, 0, 22));

if (hashExistsInDatabase($hash)) {
// Если повторно сгенерированный хэш также уже существует, выполните необходимые действия
// например, вы можете выбросить ошибку или предоставить пользователю новый шанс ввода.
} else {
// Используйте новый хэш, так как он уникален
}
} else {
// Используйте сгенерированный хэш, так как он уникален
}

// Функция для проверки существования хэша в базе данных
function hashExistsInDatabase($hash) {
// Реализуйте эту функцию в соответствии с вашей системой базы данных
// Она должна вернуть true, если хэш уже существует, и false в противном случае
}

В данном примере кода, если сгенерированный хэш уже существует в базе данных, вы пробуете сгенерировать новый хэш и повторяете процесс. Если новый хэш также уже существует, вы можете предпринять необходимые действия в зависимости от контекста.
А если повторно повторно сгенерированный хэш есть в базе , создадим ещё одно условие и так подставим ситуацию повторно повторно повторно повторно новое условие нам нужно будет
Насоветовал ты конечно идей *toporom*
________
посл. ред. 15.08.2023 в 15:05; всего 2 раз(а); by SNEG
Рекурсия в помощь. Если найдется совпадение, то просто пересоздай хэш.

Что то типа того
php
function generateHash() {
return сгенерируемый хэш;
}

function getHash() {
$hash = generateHash();
if (проверка, если хэш есть в базе) {
return getHash();
}

return $hash;
}

________
посл. ред. 15.08.2023 в 15:29; всего 1 раз(а); by invoker
Онлайн: 1
Время:
Gen. 0.1293
(c) Bym.Guru 2010-2025