Шифрование! = Хеширование. Обе они, как принято считать, относятся к категории криптографии, но когда что-то может быть зашифровано, оно может быть дешифровано, что не имеет место в хешировании. Хеширование - это просто хеширование, и все.
Соль действительно построена неправильно. Это должны быть x-байты, прочитанные из / dev / urandom с помощью вызова fopen (). Например, 16 байтов соли - это то, что я лично использую. Это эффективно предотвращает атаки радужного стола.
Чтобы сделать вещи более безопасными, используйте также секретный ключ. Например:
$hashedPassword = hash_hmac('whirlpool',$password.$salt,$key);
Ключ $ - это просто случайные данные. Например, можно создать файл размером 64 КБ, который называется «key.bin» в скрытой папке над корнем документа, и использовать file_get_contents () перед процессом хеширования.
Зачем использовать секретные ключи? Если вы храните хеши и соли в базе данных, а ключ - в файловой системе, тогда это не позволит никому взломать ваш хеш, если они получат в свои руки хранившиеся хеши и соли. Итак, злоумышленнику потребуется взломать и базу данных, и файловую систему, чтобы взломать ваши хэши, но обратите внимание, что бессмысленно взламывать ваши хэши, если они уже взломали все ваше приложение, что означает, что ваша схема хеширования хороша.