Солить с хешированной версией пароля пользователя так же безопасно, как солить с заранее определенной строкой?

В основном, я прошу, если солить пароль, добавив хешированную версию до конца, так же безопасно, как солить другой строкой. Так:

Это:

$pass = "pass"; $salt = sha1(md5($pass)); $pass = md5($pass.$salt); 

Насколько это безопасно?

 $pass = "pass"; $salt = "4D9ds*^dkrUI45^#dkd*3fD8&!dlvd*"; $pass = md5($pass.$salt); 

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

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

    Если соль основана на значении хэширования, вы теряете значение соли.

    Если соль хеша пароля основана только на значении пароля, то два пользователя, использующие один и тот же пароль, очень хорошо видны в базе данных, например.

    Вместо этого вы должны добавить соль на другое определяемое значение. Общие параметры – это поля, такие как имя пользователя, адрес электронной почты и т. Д.

    Вы не должны использовать md5 в любом случае, поскольку он был взломан. sha256 более безопасен и так же прост в применении. Как насчет использования при хранении данных:

     $salt = mt_rand(); $pass = hash('sha256',$_POST['userPassword'] . $salt); 

    Поэтому $ salt не основывается ни на каких введенных пользователем данных, а на случайных данных. Затем вы храните $ salt в db, как есть, или изменяете строку для обфускации.