A função password_hash() é usada para criar um hash da senha.
Requisitos de versão do PHP: PHP 5 >= 5.5.0, PHP 7
string senha_hash (string $senha, int $algo [, array $opções])
password_hash() cria um hash da senha usando um algoritmo de hash unilateral suficientemente forte. password_hash() é compatível com crypt(). Portanto, hashes de senha criados por crypt() também podem ser usados com password_hash().
Algoritmos atualmente suportados:
PASSWORD_DEFAULT
- Use o algoritmo bcrypt (padrão no PHP 5.5.0). Observe que essa constante mudará à medida que o PHP adicionar algoritmos mais novos e mais poderosos. Portanto, a duração dos resultados gerados usando esta constante mudará no futuro. Portanto, a coluna do banco de dados onde os resultados são armazenados pode ultrapassar 60 caracteres (preferencialmente 255 caracteres).
PASSWORD_BCRYPT
– Cria um hash usando o algoritmo CRYPT_BLOWFISH
. Isso resulta em um crypt() compatível com "$2y$". O resultado será uma sequência de 60 caracteres ou FALSE
em caso de falha.
PASSWORD_ARGON2I
– Cria um hash usando o algoritmo de hash Argon2.
Opções suportadas por PASSWORD_BCRYPT:
salt(string) - Fornece manualmente um valor salt para hash da senha. Isto evitará a geração automática de sal.
Quando este valor é omitido, password_hash() gera automaticamente um valor salt aleatório para cada hash de senha. Este modo de operação é intencional.
Nota: A opção salt está obsoleta a partir do PHP 7.0.0. Por enquanto é melhor simplesmente usar o sal gerado por padrão.
custo (inteiro) - Representa o custo utilizado pelo algoritmo. Existem exemplos de valores de custo na página crypt().
Quando omitido, o valor padrão é 10. Esse custo é um bom resultado final, mas você poderá aumentar esse valor com base em seu próprio hardware.
Opções suportadas PASSWORD_ARGON2I:
memory_cost ( integer ) - Memória máxima (unidade: byte) ao calcular o hash Argon2. Valor padrão: PASSWORD_ARGON2_DEFAULT_MEMORY_COST
.
time_cost ( integer ) – Tempo máximo gasto no cálculo do hash Argon2. Valor padrão: PASSWORD_ARGON2_DEFAULT_TIME_COST
.
threads ( integer ) – O número máximo de threads a serem usados ao calcular hashes Argon2. Valor padrão: PASSWORD_ARGON2_DEFAULT_THREADS
.
Descrição do parâmetro:
senha: um valor hash criado por password_hash().
algo: Uma constante de algoritmo criptográfico usada para indicar o algoritmo usado ao fazer hash de senhas.
opções: uma matriz associativa contendo opções. Atualmente, duas opções são suportadas: salt, o salt (string de interferência) adicionado ao fazer o hash da senha, e cost, que é usado para especificar o número de níveis de recursão do algoritmo. Exemplos desses dois valores podem ser encontrados na página crypt().
Quando omitido, um valor salt aleatório e um custo padrão serão usados.
Retorna a senha com hash ou FALSE em caso de falha.
A saída é:
$ 2 anos $ 10 $.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
A saída é:
$2 anos$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Exemplo de configuração manual do valor do sal
<?php /* * * Observe que o valor salt aqui é gerado aleatoriamente. * Nunca use um valor de sal fixo ou um valor de sal que não seja gerado aleatoriamente. * * Na maioria dos casos, você pode deixar password_hash gerar automaticamente um valor salt aleatório para você */ $ opções = [ ' custo ' => 11 , ' salt ' = > mcrypt_create_iv ( 22 , MCRYPT_DEV_URANDOM ) , ] ; senha_hash ( " rasmuslerdorf " , PASSWORD_BCRYPT , $ opções ) ;A saída é:
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.
Exemplo de Password_hash() para encontrar o melhor custo
<?php /* * * Este exemplo executa um teste de benchmark no servidor para testar quão alto o custo o servidor pode suportar * O valor mais alto pode ser definido sem desacelerar significativamente o servidor * 8-10 é um bom resultado final, no servidor Se é rápido o suficiente, quanto mais alto, melhor. * O alvo de código a seguir é ≤ 50 milissegundos (milissegundos), * adequado para o sistema lidar com login interativo. */ $timeTarget = 0,05 ; // 50 milissegundos (milissegundos) $ custo = 8 ; { $ custo ++ ; $ start = microtime ( true ) ; senha_hash ( " teste " , PASSWORD_BCRYPT , [ " custo " = > $ cost ] ) ; enquanto ( ( $end - $start ) < $ timeTarget ) ; " Custo apropriado encontrado: " ? >A saída é:
Custo apropriado encontrado: 10
Exemplo usando Argon2:
<?php eco ' Hash Argon2 : ' .password_hash ( ' rasmuslerdorf ' , PASSWORD_ARGON2I ) ;A saída é:
Hash de argônio2: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0