Обучение/Помощь новичкам | Два одинаковых хэша
Тема закрыта by
SNEG
Один человек говорит что может быть два одинаковых хэша, другой говорит что доктора стренджа не существует, что crypt не выдаст microtime() в связке с rand () дубликат хэша через пол года, или лет 5.
Вопросы так же и остались может быть ли 2 одинаковых хэша ? Зайду на перед задам ещё вопрос, как обработать в php если выдал дубликат чтобы не выбрасывать ошибку в виде условия "извините но такой хэш есть попробуйте ещё раз может вам повезёт"? Если в таблице хэшу присвоен уникальный идентификатор ?
________
посл. ред. 14.08.2023 в 19:30; всего 2 раз(а); by SNEG
Вопросы так же и остались может быть ли 2 одинаковых хэша ? Зайду на перед задам ещё вопрос, как обработать в php если выдал дубликат чтобы не выбрасывать ошибку в виде условия "извините но такой хэш есть попробуйте ещё раз может вам повезёт"? Если в таблице хэшу присвоен уникальный идентификатор ?
php
$key = microtime().rand();
$hash = crypt($key, '$2y$10$'.substr($key, 0, 22));________
посл. ред. 14.08.2023 в 19:30; всего 2 раз(а); by SNEG
Один человек говорит что может быть два одинаковых хэша, другой говорит что доктора стренджа не существует, что 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));________
посл. ред. 15.08.2023 в 00:13; всего 3 раз(а); by SNEG
Первая часть поста - да, возможно
Вторая часть поста - не выводи ошибку, а обработай её, сгенерировав новый хэш
Вторая часть поста - не выводи ошибку, а обработай её, сгенерировав новый хэш
Первая часть поста - да, возможно
Вторая часть поста - не выводи ошибку, а обработай её, сгенерировав новый хэш
Или почитать в интернете и сделать вывод, на основе того, что в жизни не видел, это нормально?
Шанс совпадения равен 0 и точка. Для совпадения требуется около млрд запросов в 1 сек, тогда может и совпадёт 1 пара.
Покажи мне в своей практике, где встречал такое
Или почитать в интернете и сделать вывод, на основе того, что в жизни не видел, это нормально?
Хэш-функции обычно разрабатываются таким образом, чтобы минимизировать возможность коллизий (ситуации, когда двум разным входным данным соответствует один и тот же хэш). Однако, абсолютно исключить коллизии невозможно из-за ограниченного размера хэша и бесконечного количества входных данных. Таким образом, в теории, двум разным входам может быть присвоен одинаковый хэш.
В вашем примере кода, вы используете входные данные, включающие метку времени и случайное число для генерации хэша. Это уменьшает вероятность коллизий, но не исключает их полностью.
Если вы сталкиваетесь с ситуацией, когда хэш-значение уже существует в вашей таблице, вы можете обработать это следующим образом:
В данном примере кода, если сгенерированный хэш уже существует в базе данных, вы пробуете сгенерировать новый хэш и повторяете процесс. Если новый хэш также уже существует, вы можете предпринять необходимые действия в зависимости от контекста.
В вашем примере кода, вы используете входные данные, включающие метку времени и случайное число для генерации хэша. Это уменьшает вероятность коллизий, но не исключает их полностью.
Если вы сталкиваетесь с ситуацией, когда хэш-значение уже существует в вашей таблице, вы можете обработать это следующим образом:
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 в противном случае
}В данном примере кода, если сгенерированный хэш уже существует в базе данных, вы пробуете сгенерировать новый хэш и повторяете процесс. Если новый хэш также уже существует, вы можете предпринять необходимые действия в зависимости от контекста.
Хэш-функции обычно разрабатываются таким образом, чтобы минимизировать возможность коллизий (ситуации, когда двум разным входным данным соответствует один и тот же хэш). Однако, абсолютно исключить коллизии невозможно из-за ограниченного размера хэша и бесконечного количества входных данных. Таким образом, в теории, двум разным входам может быть присвоен одинаковый хэш.
В вашем примере кода, вы используете входные данные, включающие метку времени и случайное число для генерации хэша. Это уменьшает вероятность коллизий, но не исключает их полностью.
Если вы сталкиваетесь с ситуацией, когда хэш-значение уже существует в вашей таблице, вы можете обработать это следующим образом:
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 в противном случае
}В данном примере кода, если сгенерированный хэш уже существует в базе данных, вы пробуете сгенерировать новый хэш и повторяете процесс. Если новый хэш также уже существует, вы можете предпринять необходимые действия в зависимости от контекста.
Насоветовал ты конечно идей
________
посл. ред. 15.08.2023 в 15:05; всего 2 раз(а); by SNEG
Рекурсия в помощь. Если найдется совпадение, то просто пересоздай хэш.
Что то типа того
________
посл. ред. 15.08.2023 в 15:29; всего 1 раз(а); by invoker
Что то типа того
php
function generateHash() {
return сгенерируемый хэш;
}
function getHash() {
$hash = generateHash();
if (проверка, если хэш есть в базе) {
return getHash();
}
return $hash;
}________
посл. ред. 15.08.2023 в 15:29; всего 1 раз(а); by invoker