как реализовать sha 512, md5 и солевое шифрование всего за один пароль

$pass="test" 

вышеперечисленная переменная содержит пароль, называемый test.I хочу хэшировать этот пароль, используя sha512 md5 и соль. Как я могу это сделать, поскольку я обнаружил только преимущества соли и sha512, я уже знаю md5 encryption.please Мне нужно решение, так как моя система восприимчивы

и, пожалуйста, объясните это с помощью примера кода, потому что im все еще привязан к md5


от того, что я понял вашими комментариями и ответами, я получил следующий код

 $pass="test"; $hashed_pass= openssl_digest($pass, 'sha512'); 

ok кажется достаточно солидным, но что такое [salt = '']? он генерирует случайную строку солида или что-то, если это так, как ее реализовать?

    Изменить. Поскольку этот ответ по-прежнему вызывает некоторый интерес, позвольте мне направить вас всех к password_hash() который по существу является оберткой вокруг crypt() но гораздо проще в использовании. Если вы используете PHP <5.5, то есть password_compat, который был написан одним и тем же парнем и фактически связан с официальной документацией.

    Если вы уже используете crypt() , стоит заметить, что и password_verify() и password_needs_rehash() будут работать со всеми паролями crypt() , поэтому вряд ли есть причина не обновлять!


    Используйте crypt() , он обеспечивает МНОГО более сильных методов хэширования.

    Хеш новый пароль:

     // generate a 16-character salt string $salt = substr(str_replace('+','.',base64_encode(md5(mt_rand(), true))),0,16); // how many times the string will be hashed $rounds = 10000; // pass in the password, the number of rounds, and the salt // $5$ specifies SHA256-CRYPT, use $6$ if you really want SHA512 echo crypt('password123', sprintf('$5$rounds=%d$%s$', $rounds, $salt)); // output: $5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8 

    Сравните существующий пароль:

     // the hash stored for the user $given_hash = '$5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8'; $test_pw = 'password123'; // extract the hashing method, number of rounds, and salt from the stored hash // and hash the password string accordingly $parts = explode('$', $given_hash); $test_hash = crypt($test_pw, sprintf('$%s$%s$%s$', $parts[1], $parts[2], $parts[3])); // compare echo $given_hash . "\n" . $test_hash . "\n" . var_export($given_hash === $test_hash, true); /* output: $5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8 $5$rounds=10000$3ES3C7XZpT7WQIuC$BEKSvZv./Y3b4ZyWLqq4BfIJzVHQweHqGBukFmo5MI8 true */ 

    Если вы используете PHP> = 5.3, функция openssl_digest должна делать трюк:

     echo openssl_digest($pass, 'sha512'); // result ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff echo md5($pass); // result 098f6bcd4621d373cade4e832627b4f6 

    И с PHP 5.1 или 5.2 у вас есть хеш-функция:

     echo hash('sha512', $pass); // result ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff echo md5($pass); 098f6bcd4621d373cade4e832627b4f6