PHP Crypt и соль - больше разъяснений, пожалуйста
-
25-09-2019 - |
Вопрос
Я был здесь вчера и получил несколько очень великих ответов. Я взял то, что я получил и собрал, то, что я думаю, будет довольно безопасным алгоритмом. У меня проблема с использованием Blowfish с циклом для цикла, которая генерирует соль.
Я использую Base64 символов и A для цикла, чтобы получить случайную строку. Я хочу взять эту сгенерированную строку и вставить ее в функцию Crypt в качестве соли.
Поскольку документация о Blowfish - это такая редкая, и документы PHP на самом деле даже не упоминают об этом, я своего рода темнота в темноте.
Действительно странная вещь, если вы запускаете этот код так, как сейчас, это будет нет потерпеть неудачу. Удалять либо '$ 2A $ 07 $' сверху для цикла или от функции крипта, и это будет периодически Верните зашифрованную строку. Мое понимание Blowfish - это то, что зашифрованная строка должен Начните с $ 2a $ 07 $ 'и заканчиваются в «$», следовательно, объединение в функции Crupt. Мне действительно не нужна начальная строка над циклом и просто хотела избавиться от этого.
Я также хотел бы разъяснить о лучшей практике при хранении случайной соли, либо в базе данных или Поддерживая вывод функции Crypt в базе данных?
Вчера не было никакого реального кода, который брошен, просто обсуждение. Я хотел бы поставить некоторый код вместе сегодня и иметь что-то довольно безопасно на месте. Если кто-то может придумать лучший алгоритм, я всегда открыт.
$base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
$salt = '$2a$07$';
for($i=0; $i<60; $i++)
{
$salt .= $base64[rand(0,63)];
}
return crypt('password', '$2a$07$'.$salt.'$');
Решение
Кажется, что crypt()
Невиды +
Чем в соли и многие другие специальные символы (*
, %
так далее). Если вы отфильтровали их, он должен работать на каждой попытке (и нет необходимости повторять строку идентификатора соли).
Другие советы
Я знаю, что этот вопрос практически древняя история, но в интересах тех, кто находит его, поисши в поисках Google, есть довольно подробное описание того, как соли Bcrypt / Eksblowfish работают в ответ на этот вопрос:
Почему склеп / Blowfish генерируют то же самое хеш с двумя разными солями?
Краткий ответ, как сказал CAF, он использует алфавит Base64, состоящий из [a-zA-Z0-9./]
, с участием $
Как нулевой (не 0) увольнение / прокладки символа. Если вы используете какие-либо персонажи вне этого диапазона, или $
Слишком рано, это будет либо ошибся или не интерпретировать полную соль.