Encriptando Senhas no PHP

Quando estamos construindo um sistema que exige maior segurança usamos uma criptografia, geralmente usamos uma hashes como MD5 e SHA1.Um grande problema e que geralmente usamos desta forma :

1
2
3
4
5
6
7
8
 
<?php
$senha = 'olá mundo';
$senha = md5($senha);
 
//Resultado: ca4e913424bfcfe71c016829a371a1f1
 
<?
 para uma segurança maior usamos um “salt”
1
2
3
4
5
6
7
8
9
<?php
 
$salt = '1%1cAu!g+&gt;K53PY}';
$senha = 'olá mundo';
$senha = md5($senha . $salt);
// Resultado:
// c1de0ebde1fd59955ccd57ccd89ac2e9
 
<?
mais se um hacker tiver acesso concerteza sabera o “salt” que
nos usamos.
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?php
function geraSaltAleatorio($tamanho = 22) {
return substr(sha1(mt_rand()), 0, $tamanho);  
}
 
$salt = geraSaltAleatorio();
$senha = 'olá mundo';
$senha = md5($senha . $salt);
 
// c1de0ebde1fd59955ccd57ccd89ac2e9
// Salvamos $senha e $salt no banco de dados
?>