English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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 password_hash (string $password, int $algo[, array $options])
password_hash() cria um hash da senha usando um algoritmo de hash unidirecional de força suficiente. password_hash() é compatível com crypt(). Portanto, o hash de senha criado pelo crypt() também pode ser usado com password_hash().
Algoritmos suportados atualmente:
PASSWORD_DEFAULT
- Usar o algoritmo bcrypt (PHP 5.5.0 por padrão).
Atenção, este constante mudará à medida que o PHP adicionar atualizações com algoritmos mais fortes.
Portanto, o uso deste constante para gerar o comprimento do resultado pode mudar no futuro.
Portanto, a coluna que armazena o resultado no banco de dados pode ter mais60 caracteres (melhor255caracteres).
PASSWORD_BCRYPT
- Usar CRYPT_BLOWFISH
Cria um hash com o algoritmo.
Isso gerará compatibilidade com o uso de "$2do crypt() com y$".
O resultado será 6Uma string de 0 caracteres, ou será retornada em caso de falha FALSE
.
PASSWORD_ARGON2I
- 使用 Argon2 Cria um hash a partir do algoritmo de hash.
Opções suportadas pelo PASSWORD_BCRYPT:
salt(string) - Forneça manualmente o valor de sal do hash de senha. Isso evitará a geração automática do sal.
Após omitir este valor, o password_hash() gerará automaticamente um valor de sal aleatório para cada hash de senha. Esta é uma prática intencional.
Atenção: a opção de sal (salt) foi descontinuada a partir do PHP 7.0.0 foi descontinuado (deprecated). Atualmente, é melhor simplesmente usar o valor de sal gerado aleatoriamente.
cost (integer) - representa o cost usado pelo algoritmo. Exemplos de valores de cost podem ser encontrados na página crypt().
omitido, o valor padrão é 10. Este cost é uma boa base, mas talvez possa ser aumentado conforme a situação da sua hardware.
PASSWORD_ARGON2Opções suportadas por I:
memory_cost (integer) - calcular Argon2 memória máxima permitida no hash (em bytes byte). Valor padrão: PASSWORD_ARGON2_DEFAULT_MEMORY_COST
.
time_cost (integer) - calcular Argon2 tempo máximo permitido no hash. Valor padrão: PASSWORD_ARGON2_DEFAULT_TIME_COST
.
threads (integer) - calcular Argon2 número máximo de threads permitidas no hash. Valor padrão: PASSWORD_ARGON2_DEFAULT_THREADS
.
Descrição dos parâmetros:
password: um valor de hash criado pelo password_hash().
algo: um constante de algoritmo de senha usada para indicar o algoritmo ao criar o hash de senha.
options: um array associativo contendo opções. Atualmente suporta duas opções: salt, a string de扰乱 adicionada ao hash de senha, e cost, que indica o número de camadas recursivas do algoritmo. Exemplos desses valores podem ser encontrados na página crypt().
omitido, usará valor de sal aleatório e cost padrão.
retorna a senha hashada ou FALSE em caso de falha.
<?php /** * nós queremos usar o algoritmo de hash padrão para criptografar a senha * Atualmente é BCRYPT, e produzirá 60 caractere(s) de resultado. * * Atenção, com o passar do tempo, o algoritmo padrão pode mudar, * portanto, o espaço de armazenamento necessário deve ser maior que 60 palavra(s)255palavra correta) */ echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT); ?>
输出结果为:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
<?php /** * Neste caso, aumentamos o cost do BCRYPT para 12. * Atenção,我们已经切换到了,将始终产生 60 caractere(s). */ $options = [ 'cost' => 12, ]; echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options); ?>
输出结果为:
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Exemplo de configuração manual de valor de sal
<?php /** * Atenção, o valor de sal aqui é gerado aleatoriamente. * Nunca utilize um valor de sal fixo ou não gerado aleatoriamente. * * 在绝大多数情况下,可以让 password_hash generate 为你自动产生随机盐值 */ $options = [ 'cost' => 11, 'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), ]; echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options); ?>
输出结果为:
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.
寻找最佳 cost 的 password_hash() 实例
<?php /** * 这个实例对服务器做了基准测试(benchmark),检测服务器能承受多高的 cost * 在不明显拖慢服务器的情况下可以设置最高的值 * 8-10 是个不错的底线,在服务器够快的情况下,越高越好。 * 以下代码目标为 ≤ 50 毫秒(milliseconds), * 适合系统处理交互登录。 */ $timeTarget = 0.05; // 50 毫秒(milliseconds) $cost = 8; do { $cost++; $start = microtime(true); password_hash("test", PASSWORD_BCRYPT, ["cost" => $cost]); $end = microtime(true); } while (($end - $start) < $timeTarget); echo "Appropriate Cost Found: " . $cost; ?>
输出结果为:
Appropriate Cost Found: 10
使用 Argon2 实例:
<?php echo 'Argon2 hash: $argon . password_hash('rasmuslerdorf', PASSWORD_ARGON2I); ?>
输出结果为:
Argon2 hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0