Как создавать и сохранять хэши паролей с помощью Blowfish в PHP

Одним из самых быстрых способов сделать многих с заменяющими образцами из неизменного списка является метод псевдонима. Базовая интуиция - то, что мы можем создать ряд мусорных ведер равного размера для взвешенного списка, который может быть индексирован очень эффективно посредством битовых операций, для предотвращения двоичного поиска. Окажется, что, сделанный правильно, мы должны будем только сохранить два объекта из исходного списка на мусорное ведро, и таким образом можем представить разделение с единственным процентом.

Позволяют нам нас, берут пример пяти одинаково взвешенных вариантов, (a:1, b:1, c:1, d:1, e:1)

Для создания поиска псевдонима:

  1. Нормализуют веса, таким образом, что они суммируют к 1.0. (a:0.2 b:0.2 c:0.2 d:0.2 e:0.2) Это - вероятность выбора каждого веса.

  2. Находят самое маленькое питание 2 больших, чем или равный количеству переменных и создают это количество разделов, |p|. Каждый раздел представляет вероятностную меру 1/|p|. В этом случае мы создаем 8 разделы, каждый, который в состоянии содержать 0.125.

  3. Берут переменную с наименее сохраняющим весом и место как можно больше, он - масса в пустом разделе. В этом примере мы видим что a заливки первый раздел. (p1{a|null,1.0},p2,p3,p4,p5,p6,p7,p8) с (a:0.075, b:0.2 c:0.2 d:0.2 e:0.2)

  4. , Если раздел не заполнен, возьмите переменную с большей частью веса и заполните раздел той переменной.

Повторные шаги 3 и 4, пока ни один из веса от исходного раздела не должен быть присвоенным списку.

, Например, если мы выполняем другое повторение 3 и 4, мы видим

(p1{a|null,1.0},p2{a|b,0.6},p3,p4,p5,p6,p7,p8) с [1 111] оставленный быть присвоенными

Во времени выполнения:

  1. Добирается U(0,1) случайное число, говорит двоичный файл 0.001100000

  2. сдвиг разряда это lg2(p), находя индексный раздел. Таким образом мы смещаем его на [1 115], уступая 001.1, или положение 1, и таким образом раздел 2.

  3. , Если раздел разделяется, используйте десятичную часть смещенного случайного числа для решения разделения. В этом случае значение 0.5, и 0.5 < 0.6, так возврат a.

Вот некоторый код и другое объяснение , но к сожалению это не использует bitshifting технику, и при этом я на самом деле не проверил его.

27
задан 13 February 2011 в 10:47
поделиться

1 ответ

Вы должны хранить весь вывод crypt, нет особого смысла разбивать его на части, потому что в любом случае вам нужно генерировать новую соль для каждого хешируемого пароля. Использовать фиксированную скрытую соль, как упомянул Мэтт, неправильно - соль должна быть разной для каждого хеша.

Для получения дополнительной информации см. http://www.openwall.com/articles/PHP-Users-Passwords - я рекомендую использовать библиотеку phpass, потому что она обрабатывает генерацию случайной соли для вас, в отличие от crypt ( ).

13
ответ дан 28 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: