(PHP 4, PHP 5, PHP 7)
crypt — Encriptação unidirecional de string (hashing)
$str
[, string $salt
] )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$
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.
Retorna a string encriptada.
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
Nota: Não há função decrypt, visto que crypt() usa um algoritmo unidirecional.