Função PHP crypt()
❮ Referência de String PHP
Definição e uso
A função crypt() retorna uma string com hash usando algoritmos DES, Blowfish ou MD5.
Esta função se comporta de forma diferente em diferentes sistemas operacionais. O PHP verifica quais algoritmos estão disponíveis e quais algoritmos usar quando for instalado.
O parâmetro salt é opcional. No entanto, crypt() cria uma senha fraca sem o salt. Certifique-se de especificar um sal forte o suficiente para melhor segurança.
Existem algumas constantes que são usadas junto com a função crypt(). O valor dessas constantes é definido pelo PHP quando ele é instalado.
Constantes:
- [CRYPT_STD_DES] - Hash padrão baseado em DES com sal de dois caracteres do alfabeto "./0-9A-Za-z". O uso de caracteres inválidos no salt fará com que esta função falhe.
- [CRYPT_EXT_DES] - Hash baseado em DES estendido com um sal de nove caracteres que consiste em um sublinhado seguido por 4 bytes de contagem de iteração e 4 bytes de sal. Estes são codificados como caracteres imprimíveis, 6 bits por caractere, primeiro o caractere menos significativo. Os valores de 0 a 63 são codificados como "./0-9A-Za-z". O uso de caracteres inválidos no salt fará com que a função falhe.
- [CRYPT_MD5] - hash MD5 com um sal de 12 caracteres começando com $1$
- [CRYPT_BLOWFISH] - Hash de baiacu com um sal começando com $2a$, $2x$ ou $2y$, um parâmetro de custo de dois dígitos "$" e 22 caracteres do alfabeto "./0-9A-Za-z" . O uso de caracteres fora do alfabeto fará com que essa função retorne uma string de comprimento zero. O parâmetro "$" é o logaritmo de base 2 da contagem de iteração para o algoritmo de hash baseado em Blowfish subjacente e deve estar no intervalo 04-31. Valores fora desse intervalo farão com que a função falhe.
- [CRYPT_SHA_256] - Hash SHA-256 com um sal de 16 caracteres começando com $5$. Se a string salt começa com "rounds=<N>$", o valor numérico de N é usado para indicar quantas vezes o loop de hashing deve ser executado, assim como o parâmetro cost no Blowfish. O número padrão de rodadas é 5.000, há um mínimo de 1.000 e um máximo de 999.999.999. Qualquer seleção de N fora desse intervalo será truncada até o limite mais próximo.
- [CRYPT_SHA_512] - hash SHA-512 com um sal de 16 caracteres começando com $6$. Se a string salt começa com "rounds=<N>$", o valor numérico de N é usado para indicar quantas vezes o loop de hashing deve ser executado, assim como o parâmetro cost no Blowfish. O número padrão de rodadas é 5.000, há um mínimo de 1.000 e um máximo de 999.999.999. Qualquer seleção de N fora desse intervalo será truncada até o limite mais próximo.
Em sistemas em que esta função oferece suporte a vários algoritmos, as constantes acima são definidas como "1" se houver suporte e "0" caso contrário.
Nota: Não há função de descriptografia. A função crypt() usa um algoritmo unidirecional.
Sintaxe
crypt(str,salt)
Valores de parâmetro
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
Detalhes técnicos
Valor de retorno: | Retorna a string codificada ou uma string com menos de 13 caracteres e com garantia de ser diferente do salt em caso de falha |
---|---|
Versão do PHP: | 4+ |
Registro de alterações: | PHP 5.6.0 - Mostra um aviso de segurança E_NOTICE se o sal for omitido. PHP 5.3.7 - Adicionados modos Blowfish de $2x$ e $2y$. PHP 5.3.2 - Adicionado SHA-256 e SHA-512. Corrigido o comportamento do Blowfish em rodadas inválidas retorna a string "failure" ("*0" ou "*1"), em vez de retornar ao DES. PHP 5.3.0 - O PHP agora contém sua própria implementação para MD5 crypt, Standard DES, Extended DES e os algoritmos Blowfish e usará isso se o sistema não tiver suporte para um ou mais dos algoritmos. |
Mais exemplos
Exemplo
Neste exemplo vamos testar os diferentes algoritmos:
<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "Extended DES not supported.\n<br>";
}
// 12 character salt starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 not supported.\n<br>";
}
// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; }
else
{
echo "SHA-256 not supported.\n<br>";
}
// 16 character salt starting with $6$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>
A saída do código acima pode ser (dependendo do sistema operacional):
Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.
❮ Referência de String PHP