A função crypt() retorna uma string criptografada usando o algoritmo DES, Blowfish ou MD5.
Esta função se comporta de maneira diferente em diferentes sistemas operacionais e alguns sistemas operacionais suportam mais de um tipo de algoritmo. No momento da instalação, o PHP verifica quais algoritmos estão disponíveis e quais algoritmos são usados.
O algoritmo exato depende do formato e comprimento do argumento salt. Salt pode tornar a criptografia mais segura aumentando o número de strings geradas a partir de uma string específica com um método de criptografia específico.
Aqui estão algumas constantes usadas com a função crypt(). Esses valores constantes são definidos pelo PHP durante a instalação.
constante:
[CRYPT_SALT_LENGTH] – Comprimento de criptografia padrão. Use criptografia DES padrão, comprimento 2
[CRYPT_STD_DES] - Criptografia padrão baseada em DES com um sal de 2 caracteres do alfabeto "./0-9A-Za-z". Usar caracteres inválidos no salt fará com que a função falhe.
[CRYPT_EXT_DES] - Criptografia estendida baseada em DES com um sal de 9 caracteres que consiste em um sublinhado, seguido por um número de iteração de 4 bytes e um sal de 4 bytes. Eles 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". Usar caracteres inválidos no salt fará com que a função falhe.
[CRYPT_MD5] - Criptografia MD5 com salt de 12 caracteres começando com $1$.
[CRYPT_BLOWFISH] - A criptografia Blowfish tem um salt começando com $2a$, $2x$ ou $2y$, um parâmetro de custo de dois dígitos "$" e do alfabeto "./0-9A-Za-z" 22 caracteres em . Usar caracteres fora do alfabeto fará com que a função retorne uma string de comprimento zero. O parâmetro "$" é o logaritmo de base 2 do número de iterações do algoritmo de hash Blowfish e deve estar no intervalo 04-31. Valores fora deste intervalo causarão falha na função.
[CRYPT_SHA_256] - A criptografia SHA-256 tem um salt de 16 caracteres, começando com $5$. Se a string salt começar com "rounds=<N>$", o valor numérico de N será usado para representar o número de vezes que a rodada hash é executada, semelhante ao parâmetro de custo no Blowfish. O número padrão de ciclos é 5.000, o valor mínimo é 1.000 e o valor máximo é 999.999.999. Qualquer valor de N fora deste intervalo será convertido para o valor limite mais próximo.
[CRYPT_SHA_512] - A criptografia SHA-512 tem um sal de 16 caracteres, começando com $6$. Se a string salt começar com "rounds=<N>$", o valor numérico de N será usado para representar o número de vezes que a rodada hash é executada, semelhante ao parâmetro de custo no Blowfish. O número padrão de ciclos é 5.000, o valor mínimo é 1.000 e o valor máximo é 999.999.999. Qualquer valor de N fora deste intervalo será convertido para o valor limite mais próximo.
Em sistemas onde esta função suporta múltiplos algoritmos, as constantes acima são definidas como "1" se suportadas e "0" caso contrário.
Nota: Não há função de descriptografia correspondente. A função crypt() usa um algoritmo unidirecional.
cripta( str,sal )
parâmetro | descrever |
---|---|
str | Obrigatório. Especifica a string a ser codificada. |
sal | Opcional. Uma string usada para aumentar o número de caracteres codificados para tornar a codificação mais segura. Se nenhum argumento salt for fornecido, um será gerado aleatoriamente cada vez que a função for chamada. |
Valor de retorno: | Retorna uma string criptografada ou, em caso de falha, uma string com menos de 13 caracteres que é garantidamente diferente do salt. |
---|---|
Versão PHP: | 4+ |
Registro de atualização: | No PHP 5.3.7, os modos Blowfish $2x$ e $2y$ foram adicionados para lidar com possíveis ataques de alto nível. No PHP 5.3.2, as novas constantes SHA-256 e SHA-512 foram adicionadas. A partir do PHP 5.3.2, Blowfish retornará a string "failure" ("*0" ou "*1") em loops inválidos em vez de retornar ao DES. Desde o PHP 5.3.0, o PHP vem com implementação de criptografia MD5, implementação DES padrão, implementação DES estendida e algoritmo Blowfish. Caso o sistema não suporte o algoritmo acima, será utilizado o algoritmo próprio do PHP. |
Use htpasswd para criptografia crypt():
<?php // Definir senha $password = ' mypassword ' ; // Obtenha o valor hash, use o valor salt automático $hash = cripta ( $ senha ) ;Neste exemplo, usamos diferentes tipos de hash:
<?php se ( CRYPT_STD_DES == 1 ) { eco ' DES padrão : ' . cripta ( ' rasmuslerdorf ' , ' rl ' ) . se ( CRYPT_EXT_DES == 1 ) { eco ' DES estendido : ' . cripta ( ' rasmuslerdorf ' , ' _J9..rasm ' ) . se ( CRYPT_MD5 == 1 ) { eco ' MD5 : ' . cripta ( ' rasmuslerdorf ' , ' $ 1 $ rasmusle $ ' ) . se ( CRYPT_BLOWFISH == 1 ) { eco ' Blowfish: ' . cripta ( ' rasmuslerdorf ' , ' $ 2a $ 07$ usesomesillystringforsalt $ ' ) . se ( CRYPT_SHA256 == 1 ) { eco ' SHA-256: ' . cripta ( ' rasmuslerdorf ' , ' $ 5 $ rounds = 5000 $ usesomesillystringforsalt$ ' ) . se ( CRYPT_SHA512 == 1 ) { eco ' SHA-512: ' . cripta ( ' rasmuslerdorf ' , ' $ 6 $ rounds = 5000 $usesomesillystringforsalt$ ' ) . ?>O código acima gera o seguinte (dependendo do sistema operacional):
DES padrão: rl.3StKT.4T8MExtendido DES: _J9..rasmBYk8r9AiWNcMD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0Blowfish: $ 2a $ 07 $ usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hiSHA-256: $ 5$ rodadas = 5000 $ usesomesillystri $ KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH / Tp.6SHA-512: $6$rodadas=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21