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.