como implementar sha 512, md5 e criptografia de sal tudo por uma senha

$pass="test" 

A variável acima contém uma senha chamada teste. Eu quero ter essa senha usando sha512 md5 e sal. Como faço isso, ive encontrado somente benifits de sal e sha512, eu já conheço criptografia md5. Por favor, eu preciso da solução, pois meu sistema é vunerable

e por favor explique isso com um exemplo de código porque ainda estou anexado ao md5


A partir do que entendi pelos seus comentários e respostas, recebi o seguinte código

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

ok parece sólido o suficiente, mas o que é [sal = ”]? ele gera uma corda de sal aleatória ou algo se assim for como implementá-la?

Editar: uma vez que esta resposta ainda parece estar gerando um pouco de interesse, deixe-me dirigir todos para password_hash() que é essencialmente um wrapper em torno da crypt() mas muito mais fácil de usar. Se você estiver usando o PHP <5.5 há password_compat que foi escrito pelo mesmo cara e, na verdade, está vinculado à documentação oficial.

Se você já estiver usando crypt() , vale a pena notar que ambos password_verify() e password_needs_rehash() funcionarão com todas as senhas de estilo crypt() , então dificilmente há um motivo para não atualizar!


Use a crypt() , proporciona muitos methods de hashing mais fortes.

Hash uma nova senha:

 // 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 

Compare uma senha existente:

 // 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 */ 

Se você estiver usando PHP> = 5.3, a function openssl_digest deve fazer o truque:

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

E com PHP 5.1 ou 5.2, você tem a function hash:

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