Função crypt() do PHP

Definição e uso

A função crypt() retorna uma string criptografada usando os algoritmos DES, Blowfish ou MD5.

O comportamento dessa função varia em diferentes sistemas operacionais, alguns sistemas operacionais suportam mais de um tipo de algoritmo. Durante a instalação, o PHP verifica quais algoritmos estão disponíveis e quais algoritmos são usados.

O algoritmo específico depende do formato e do comprimento do parâmetro salt. O salt pode tornar a criptografia mais segura ao aumentar o número de strings geradas por uma string específica usada para um método de criptografia específico.

Aqui estão algumas constantes usadas juntamente com a função crypt(). Os valores dessas constantes são configurados pelo PHP durante a instalação.

Constantes:

[CRYPT_SALT_LENGTH] Tamanho padrão de criptografia. Usa criptografia DES padrão, com comprimento de 2.
[CRYPT_STD_DES] Hash baseado no algoritmo DES padrão usa dois caracteres do conjunto "/./0-9A-Za-z" como sal. O uso de caracteres ilegais no sal levará ao fracasso do crypt().
[CRYPT_EXT_DES] Hash baseado no algoritmo DES expandido. O sal é uma string de 9 caracteres, composta por um sublinhado seguido de 4 bytes de repetição e 4 bytes de sal. Eles são codificados em caracteres impressíveis, cada um com 6 bits, priorizando o número de bits válidos mais baixo. De 0 a 63 são codificados como "/./0-9A-Za-z". O uso de caracteres ilegais no sal levará ao fracasso do crypt().
[CRYPT_MD5] A dispersão MD5 usa uma string de sal de 12 caracteres iniciada com $1$.
[CRYPT_BLOWFISH] O algoritmo Blowfish usa a seguinte string de sal: "$2a$", um parâmetro cost de dois dígitos, "$" e uma string de 64 bits composta por caracteres de "./0-9A-Za-z". O uso de caracteres fora deste intervalo na string de sal causará o crypt() retornar uma string vazia. O parâmetro cost de dois dígitos é o logaritmo em base 2 do número de vezes de loop, cujo intervalo é 04-31. O valor fora deste intervalo causará falha no crypt().
CRYPT_SHA256 O algoritmo SHA-256 usa uma string de sal de 16 caracteres iniciada com $5$ para fazer a dispersão. Se a string de sal começar com "rounds=<N>$", o valor numérico de N será usado para especificar o número de vezes que a dispersão será executada, o que é semelhante ao parâmetro cost do algoritmo Blowfish. O número de vezes padrão é 5000, o mínimo é 1000 e o máximo é 999,999,999. O valor de N fora deste intervalo será convertido para o mais próximo valor.
CRYPT_SHA512 O algoritmo SHA-512 usa uma string de sal de 16 caracteres iniciada com $6$ para fazer a dispersão. Se a string de sal começar com "rounds=<N>$", o valor numérico de N será usado para especificar o número de vezes que a dispersão será executada, o que é semelhante ao parâmetro cost do algoritmo Blowfish. O número de vezes padrão é 5000, o mínimo é 1000 e o máximo é 999,999,999. O valor de N fora deste intervalo será convertido para o mais próximo valor.

Em sistemas que suportam vários algoritmos, se os constantes acima forem suportadas, configure como "1", caso contrário, configure como "0".

Comentário:Não há função de descriptografia correspondente. A função crypt() usa um algoritmo unidirecional.

Sintaxe

crypt(str,salt)
Parâmetros Descrição
str Obrigatório. Especifica a string a ser codificada.
salt Opcional. Usada para aumentar o número de caracteres codificados para tornar a codificação mais segura. Se o parâmetro salt não for fornecido, o PHP gerará um valor aleatório a cada chamada da função.

Detalhes técnicos

Retorno: Retorna a string criptografada ou uma string com menos de 13 caracteres, para que possa ser distinguida da salt em caso de falha.
Versão do PHP: 4+

Registro de atualizações

Versão Descrição
5.3.2 Baseado na implementação de Ulrich Drepper, adicionou crypt baseado em algoritmos SHA-256 e SHA-512.
5.3.2 Corrigiu o problema do algoritmo Blowfish devido a ciclos ilegais, retornando a string "falha" ("*0" ou "*1") em vez de usar o algoritmo DES.
5.3.0 O PHP agora inclui sua própria implementação de MD5 Crypt, incluindo algoritmos DES padrão, DES estendido e Blowfish. Se o sistema não tiver a implementação correspondente, o PHP usará sua própria implementação.

Instância

Exemplo 1

Neste exemplo, vamos testar diferentes algoritmos:

<?php
// Salt de dois caracteres
if (CRYPT_STD_DES == 1)
{
echo "DES Padrão: ".crypt('something','st')."\n<br>";
}
else
{
echo "DES Padrão não suportado.\n<br>";
}
// Salt de 4 caracteres
if (CRYPT_EXT_DES == 1)
{
echo "DES Estendido: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo "DES Estendido não suportado.\n<br>";
}
// Começando com $1$. 12 caracteres
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo "MD5 não suportado.\n<br>";
}
// Salt começando com $2a$. Parâmetro de custo de dois dígitos: 09. 22 caracteres
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES não suportado.\n<br>";
}
// O sal começa com $5$, 16 caracteres. O número padrão de rounds é 5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>";
else
{
echo "SHA-256 não suportado.\n<br>";
}
// O sal começa com $5$, 16 caracteres. O número padrão de rounds é 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 não suportado.";
}
?>

A saída do código acima (dependendo do sistema operacional):

DES Padrão: stqAdD7zlbByI
DES Estendido: _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.