Pergunta

Supondo que temos um sal que está no banco de dados e que foi gerado como esta

$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?

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top