Я был здесь вчера и получил некоторые действительно большие ответы. Я взял то, что я получил и соединил, что я думаю, будет довольно безопасный алгоритм. У меня есть проблема с помощью шифра с для цикла, который генерирует соль.
Я использую base64 символы и, чтобы цикл получил случайную строку. Я хочу взять эту сгенерированную строку и вставить ее в функцию склепа как соль.
Поскольку документация о шифре так редка, и документы PHP действительно даже не упоминают это, я - вид поножовщины в темноте здесь.
Действительно странная вещь состоит в том при выполнении этого кода путем, это теперь, это не перестанет работать. Удалите или '$ за a$2$ 07' сверху для цикла или от функции склепа, и это периодически возвратит зашифрованную строку. Мое понимание шифра - то, что зашифрованная строка должна начаться 'с $ за a$2$ 07' и конца в "$' следовательно конкатенация в функции склепа. Мне действительно не нужна начинающаяся строка выше для цикла и просто требуемый для избавлений от него.
Я также хотел бы разъяснение о лучшей практике при хранении случайной соли, или в базе данных или путем хранения вывода функции склепа в базе данных?
Вчера, не было никакого реального кода, бросаемого вокруг, просто обсуждение. Я хотел бы соединить некоторый код сегодня и иметь что-то, что довольно безопасно на месте. Если кто-либо может придумать лучший алгоритм, я всегда открыт.
$base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
$salt = '$2a$07$';
for($i=0; $i<60; $i++)
{
$salt .= $base64[rand(0,63)];
}
return crypt('password', '$2a$07$'.$salt.'$');
Похоже, что crypt ()
не любит +
чугун в соли и много других специальных также символы ( *
, %
и т. д.). Если вы отфильтруете их, он должен работать при каждой попытке (и нет необходимости повторять строку идентификатора соли).