tutoriais mais recente desenvolvimento web
 

PHP crypt() Function


<PHP seqüência de referência

Definição e Uso

A crypt() função devolve uma cadeia hash usando algoritmos DES, Blowfish ou MD5.

Esta função se comporta diferente em diferentes sistemas operacionais. PHP verifica o que estão disponíveis algoritmos e quais algoritmos para usar quando ele está instalado.

O parâmetro sal é opcional. No entanto, crypt() cria uma senha fraca sem o sal. Certifique-se de especificar um sal suficiente forte para uma melhor segurança.

Existem algumas constantes que são utilizadas em conjunto com a crypt() função. O valor destas funções são definidas pelo PHP quando é instalado.

constantes:

  • [CRYPT_STD_DES] - Standard de hash DES-based com duas sal personagem do alfabeto "./0-9A-Za-z" . Usando caracteres inválidos no sal irá fazer esta função falhar.
  • [CRYPT_EXT_DES] - Extensão hash com base-DES com um sal de nove caracteres que consiste de um sublinhado seguido por 4 bytes de contagem de iteração e 4 bytes de sal. Estes são codificados como caracteres de impressão, 6 bits por caracter, carácter menos significativo em primeiro lugar. Os valores de 0 a 63 são codificados como "./0-9A-Za-z" . Usando caracteres inválidos no sal fará com que a função a falhar.
  • [CRYPT_MD5] - hash MD5 com um sal de 12 caracteres começando com $ 1 $
  • [CRYPT_BLOWFISH] - hash Blowfish com um sal começando com $ 2-A $, $ $ 2x, ou 2y $ $, a dois parâmetros de custo dígito "$" , e 22 caracteres do alfabeto "./0-9A-Za-z" . O uso de caracteres fora do alfabeto irá fazer esta função para devolver uma cadeia de comprimento zero. O "$" parâmetro é o logaritmo de base 2 da contagem de iteração para a algorithmeter hash bateu-Blowfish subjacente e deve estar na faixa de 04-31. Os valores fora desta faixa fará com que a função a falhar.
  • [CRYPT_SHA_256] - hash SHA-256 com um sal de 16 caracteres começando com 5 $ $. Se a seqüência de sal começa com "rounds=<N>$" , o valor numérico do N é usado para indicar quantas vezes o loop hashing deve ser executado, bem como o parâmetro de custo em Blowfish. O número padrão de rodadas é de 5000, há um mínimo de 1000 e um máximo de 999.999.999. Qualquer selecção de N, fora desta gama vai ser truncado para o limite mais próximo.
  • [CRYPT_SHA_512] - hash SHA-512 com um sal de 16 caracteres começando com $ 6 $. Se a seqüência de sal começa com "rounds=<N>$" , o valor numérico do N é usado para indicar quantas vezes o loop hashing deve ser executado, bem como o parâmetro de custo em Blowfish. O número padrão de rodadas é de 5000, há um mínimo de 1000 e um máximo de 999.999.999. Qualquer selecção de N, fora desta gama vai ser truncado para o limite mais próximo.

Em sistemas onde esta função suporta vários algoritmos, as constantes acima são ajustados para "1" se suportado e "0" caso contrário.

Note: Não há nenhuma função decrypt. A crypt() função utiliza um algoritmo de sentido único.


Sintaxe

crypt( str,salt )

Parâmetro Descrição
str Requeridos. Especifica a cadeia a ser hash
salt Opcional. Uma seqüência de sal para basear o hash em

Detalhes técnicos

Valor de retorno: Retorna a string codificada ou uma cadeia que é menor do que 13 caracteres e é garantido para ser diferente do sal em caso de falha
PHP Versão: 4+
changelog: $ 2 x $ e $ 2y modos $ Blowfish foram adicionados no PHP 5.3.7 para lidar com possíveis ataques de alta bit.

As constantes de SHA-256 e SHA-512 foram adicionados em PHP 5.3.2.

A partir do PHP 5.3.2, o comportamento Blowfish em rondas inválidos retorna o "failure" corda ("*0" or "*1") , em vez de cair de volta para DES.

A partir do PHP 5.3.0, PHP contém sua própria implementação para a cripta MD5, DES Padrão, Extensão DES e os algoritmos Blowfish e vai usar que se o sistema carece de suporte para um ou mais dos algoritmos.

Exemplo

Exemplo 1

Neste exemplo vamos testar os algoritmos diferentes:

<?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 $5$. 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 poderia ser (depending on the operating system) :

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.


<PHP seqüência de referência