Como essas 2 linhas de PHP diferente?
Pergunta
Supondo que temos um sal que está no banco de dados e que foi gerado como esta ??p>
$salt = time();
O que é a diferença entre estas 2 linhas.
$pass1 = hash('sha1', $password . $salt);
$pass2 = hash_hmac('sha1', $password, $salt);
Eles não produzem a mesma saída. O primeiro, a função hash
leva 2 params, enquanto o hash_hmac
precisa de 3 params. Você seria, portanto, pensar que podemos obter essa terceira param extra usando o $salt
separadamente (para cumprir o terceiro param) em oposição a concatenando-lo com a senha ($password . $salt
) como fizemos na linha 2. Mas não é assim tão simples, a 2 resultados são diferentes. Por quê? O que está acontecendo exatamente aqui?
Solução
Porque HMAC SHA-1 não é o mesmo que SHA-1 com a mensagem e chave concatenado. HMAC é mais como sha1($salt . sha1($salt . $password))
, mas não exatamente. Wikipedia tem uma descrição agradável de HMAC .