Выполнение множества итераций с помощью хеш-функции имеет несколько тонкостей, потому что в них должно быть какое-то «засоление», и поскольку существующие хеш-функции не настолько «случайны», как можно было бы ожидать;поэтому необходимо соблюдать осторожность, и в этом случае вы получите PBKDF2 .PBKDF2 был разработан для получения ключей , что не совсем то же самое, что хеширование паролей, но оказалось, что это тоже неплохо.
bcrypt имеет (небольшое) преимущество перед PBKDF2-с-SHA-1 в этом bcrypt получен из блочного шифра Blowfish .Смысл в том, чтобы иметь много итераций, сделать обработку пароля медленной и, в частности, медленной для злоумышленника.Мы допускаем , что эта функция выполняется медленно для нормальных, честных систем, потому что она препятствует широкому подбору пароля.Но злоумышленник может использовать аппаратное обеспечение, которое не используется обычной системой, например, программируемый графический процессор GPU , который значительно ускоряет вычисления, которые хорошо подходят для такого типа оборудования.Blowfish и bcrypt используют таблицы поиска на основе ОЗУ (таблицы, которые были изменены во время обработки);с такими таблицами легко работать с процессором общего назначения, но довольно сложно на GPU;таким образом, bcrypt несколько препятствует улучшению обработки злоумышленником с помощью графического процессора.Это бонус, который делает bcrypt более привлекательным для хранения паролей, чем PBKDF2.