Salting e hashing é uma técnica para armazenar a senha em um banco de dados. Na criptografia, sal significa adicionar algum conteúdo junto com a senha e, em seguida, hash. Portanto, o sal e o hash fornecem dois níveis de segurança. O salting sempre cria senhas exclusivas, ou seja, se houver duas senhas iguais, após o salting, a string resultante será alterada. Salting usado junto com hashing aumenta o nível de segurança das senhas.

Salting e hashing: No PHP, o armazenamento da senha por salting e hashing é feito pelo método password_hash(). Este método usa três parâmetros e retorna um hash final dessa senha.

Sintaxe:

string password_hash( string $pass, int $algo, array $options )

Parâmetros:

  • $pass: este parâmetro contém a senha que deve ser protegida e armazenada no banco de dados.
  • $algo: especifica o algoritmo de hash usado para criar o hash de $pass. Alguns dos parâmetros do algoritmo em php são:
    1. PASSWORD_DEFAULT: Use o algoritmo bcrypt (padrão a partir do PHP 5.5.0). Essa constante é projetada para mudar com o tempo, conforme algoritmos novos e mais fortes são adicionados ao PHP.
    2. PASSWORD_BCRYPT: É o algoritmo CRYPT_BLOWFISH para criar o hash. O resultado é uma string de 60 caracteres ou dá um FALSE em caso de falha.
  • $options: É a parte salgada. Leva sal no fator de custo de forma. É opcional; se deixado em branco, o custo padrão é adicionado à string (é 10 na maioria dos casos). Observe que mais custo leva a uma senha mais protetora e, portanto, sobrecarrega a CPU.

Valor de retorno: ele retorna a senha com hash e FALSE em caso de falha.

Exemplo: Este exemplo é uma demonstração de como mostrar o password_hash(), fazer o hash e compará-lo.

<?php
  
// Store the string into variable
$password = 'Password';
  
// Use password_hash() function to
// create a password hash
$hash_default_salt = password_hash($password,
                            PASSWORD_DEFAULT);
  
$hash_variable_salt = password_hash($password,
        PASSWORD_DEFAULT, array('cost' => 9));
  
// Use password_verify() function to
// verify the password matches
echo password_verify('Password',
            $hash_default_salt ) . "<br>";
  
echo password_verify('Password',
            $hash_variable_salt ) . "<br>";
  
echo password_verify('Password123',
            $hash_default_salt );
  
?>

Saída:

1
1
0

Neste exemplo, o método password_verify() é usado para comparar o hash criado com a string inserida como parâmetro. Leva o hash e a string para serem comparados como parâmetros e retornam true se a senha estiver correta, caso contrário, retorna false.