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
Онлайн: 4
Время:
Gen. 0.1273
(c) Bym.Guru 2010-2026