crypt

(PHP 4, PHP 5, PHP 7)

cryptEncriptação unidirecional de string (hashing)

Descrição

crypt ( string $str [, string $salt ] ) : string

crypt() retornará uma string criptografada usando o algoritmo de encriptação Unix Standard DES-based ou ou algoritmos alternativos disponíveis no sistema.

Alguns SO suportam mais de um tipo de codificação. De fato, algumas vezes a codificação Standard DES-based é substituído por MD5-based . O tipo de codificação é definido pelo argumento salt. Na instalação, o PHP determina as possíveis funções de codificação e aceitará salts para outros tipos. Se nenhum salt é fornecido, o PHP auto-gera um salt padrão de 2 caracateres por definição, a menos que o tipo de codificação padrão do sistema seja MD5, nesse caso um salt MD5-compatible aleatório será gerado. O PHP define uma constante com nome CRYPT_SALT_LENGTH que dirá se um salt de 2 caracteres aplica-se ao seu sistema ou se o salt mais comprido de 12 caracteres é aplicável.

O Standard DES-based crypt() retorna o salt como o primeiro two characters da saída. Ele também usa apenas os oito primeiros caracteres da str, então strings longas que começam com os mesmos oito caracteres gerarão o mesmo resultado (quando o mesmo salt é usado).

Em sistemas onde a função crypt() suporta variados tipos de codificação, as seguintes funções são definidas para 0 ou 1 a depender se um dado tipo está disponível:

  • CRYPT_STD_DES - Codificação Standard DES-based com um salt de 2 caracteres
  • CRYPT_EXT_DES - Codificação Extended DES-based com um salt de 9 caracateres
  • CRYPT_MD5 - Codificação MD5 com um salt de 12 caracteres começando com $1$
  • CRYPT_BLOWFISH - Codificação Blowfish com um salt de 16 caracteres começando com $2$

Parâmetros

str

A string a ser encriptada.

salt

Uma opcional string de salt para base da encriptação. Se não fornecido, será gerado randomicamente pelo PHP cada vez que chamar esta função.

Se você está usando um salt fornecido, você está ciente que o salt é gerado uma vez. Se você está chamando essa função repetidamente, isto pode afetar a aparência e a segurança.

Valor Retornado

Retorna a string encriptada.

Exemplos

Exemplo #1 Exemplos da crypt()

<?php
$password 
crypt('mypassword'); // let the salt be automatically generated

/* You should pass the entire results of crypt() as the salt for comparing a
   password, to avoid problems when different hashing algorithms are used. (As
   it says above, standard DES-based password hashing uses a 2-character salt,
   but MD5-based hashing uses 12.) */
if (crypt($user_input$password) == $password) { 
   echo 
"Password verified!";
}
?>

Exemplo #2 Usando crypt() com htpasswd

<?php
// Set the password
$password 'mypassword';

// Get the hash, letting the salt be automatically generated
$hash crypt($password);
?>

Exemplo #3 Usando crypt() com diferente tipos de encriptação

<?php
if (CRYPT_STD_DES == 1) {
    echo 
'Standard DES: ' crypt('rasmuslerdorf''rl') . "\n";
}

if (
CRYPT_EXT_DES == 1) {
    echo 
'Extended DES: ' crypt('rasmuslerdorf''_J9..rasm') . "\n";
}

if (
CRYPT_MD5 == 1) {
    echo 
'MD5:          ' crypt('rasmuslerdorf''$1$rasmusle$') . "\n";
}

if (
CRYPT_BLOWFISH == 1) {
    echo 
'Blowfish:     ' crypt('rasmuslerdorf''$2a$07$rasmuslerd...........$') . "\n";
}
?>

O exemplo acima irá imprimir algo similar à:

Standard DES: rl.3StKT.4T8M
Extended DES: _J9..rasmBYk8r9AiWNc
MD5:          $1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish:     $2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra

Notas

Nota: Não há função decrypt, visto que crypt() usa um algoritmo unidirecional.

Veja Também

  • md5() - Calcula o "hash MD5" de uma string
  • A extensão Mcrypt
  • A man page do Unix para sua função crypt para mais informação