PHP crypt() 함수
❮ PHP 문자열 참조
정의 및 사용
crypt() 함수는 DES, Blowfish 또는 MD5 알고리즘을 사용하여 해시된 문자열을 반환합니다.
이 기능은 운영 체제에 따라 다르게 작동합니다. PHP는 사용 가능한 알고리즘과 설치 시 사용할 알고리즘을 확인합니다.
salt 매개변수는 선택 사항입니다. 그러나 crypt()는 솔트 없이 약한 암호를 생성합니다. 더 나은 보안을 위해 충분히 강한 솔트를 지정해야 합니다.
crypt() 함수와 함께 사용되는 몇 가지 상수가 있습니다. 이러한 상수의 값은 PHP가 설치될 때 설정됩니다.
상수:
- [CRYPT_STD_DES] - 알파벳 "./0-9A-Za-z"의 두 문자 솔트가 있는 표준 DES 기반 해시입니다. 솔트에 잘못된 문자를 사용하면 이 기능이 실패합니다.
- [CRYPT_EXT_DES] - 밑줄 다음에 4바이트의 반복 횟수와 4바이트의 소금으로 구성된 9자 솔트가 있는 확장 DES 기반 해시입니다. 이들은 인쇄 가능한 문자로 인코딩되며, 문자당 6비트, 최하위 문자가 먼저입니다. 0에서 63까지의 값은 "./0-9A-Za-z"로 인코딩됩니다. 솔트에 잘못된 문자를 사용하면 함수가 실패합니다.
- [CRYPT_MD5] - $1$로 시작하는 12자 솔트로 MD5 해싱
- [CRYPT_BLOWFISH] - $2a$, $2x$ 또는 $2y$로 시작하는 솔트, 두 자리 비용 매개변수 "$" 및 알파벳 "./0-9A-Za-z"의 22자를 사용한 복어 해싱 . 알파벳 이외의 문자를 사용하면 이 함수가 길이가 0인 문자열을 반환합니다. "$" 매개변수는 기본 Blowfish-bashed 해싱 알고리즘 측정기에 대한 반복 횟수의 밑이 2인 로그이며 04-31 범위에 있어야 합니다. 이 범위를 벗어나는 값을 사용하면 함수가 실패합니다.
- [CRYPT_SHA_256] - $5$로 시작하는 16자 솔트를 포함하는 SHA-256 해시. 솔트 문자열이 "rounds=<N>$"로 시작하면 N의 숫자 값은 Blowfish의 비용 매개변수와 마찬가지로 해싱 루프가 실행되어야 하는 횟수를 나타내는 데 사용됩니다. 기본 라운드 수는 5000이며 최소 1000, 최대 999,999,999입니다. 이 범위를 벗어난 N 선택은 가장 가까운 제한으로 잘립니다.
- [CRYPT_SHA_512] - $6$로 시작하는 16자 솔트가 있는 SHA-512 해시. 솔트 문자열이 "rounds=<N>$"로 시작하면 N의 숫자 값은 Blowfish의 비용 매개변수와 마찬가지로 해싱 루프가 실행되어야 하는 횟수를 나타내는 데 사용됩니다. 기본 라운드 수는 5000이며 최소 1000, 최대 999,999,999입니다. 이 범위를 벗어난 N 선택은 가장 가까운 제한으로 잘립니다.
이 함수가 여러 알고리즘을 지원하는 시스템에서 위의 상수는 지원되는 경우 "1"로 설정되고 지원되지 않는 경우 "0"으로 설정됩니다.
참고: 암호 해독 기능이 없습니다. crypt() 함수는 단방향 알고리즘을 사용합니다.
통사론
crypt(str,salt)
매개변수 값
Parameter | Description |
---|---|
str | Required. Specifies the string to be hashed |
salt | Optional. A salt string to base the hashing on |
기술적 세부 사항
반환 값: | 인코딩된 문자열 또는 13자보다 짧고 실패 시 솔트와 다른 문자열을 반환합니다. |
---|---|
PHP 버전: | 4+ |
변경 로그: | PHP 5.6.0 - 솔트 가 생략 되면 E_NOTICE 보안 경고를 표시합니다 . PHP 5.3.7 - $2x$ 및 $2y$ Blowfish 모드가 추가되었습니다. PHP 5.3.2 - SHA-256 및 SHA-512가 추가되었습니다. 잘못된 라운드에서 Blowfish 동작이 DES로 되돌아가는 대신 "실패" 문자열("*0" 또는 "*1")을 반환하는 문제를 수정했습니다. PHP 5.3.0 - 이제 PHP는 MD5 crypt, Standard DES, Extended DES 및 Blowfish 알고리즘에 대한 자체 구현을 포함하며 시스템에서 하나 이상의 알고리즘에 대한 지원이 부족한 경우 이를 사용합니다. |
더 많은 예
예시
이 예에서는 다양한 알고리즘을 테스트합니다.
<?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 $6$. 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.";
}
?>
위 코드의 출력은 다음과 같을 수 있습니다(운영 체제에 따라 다름).
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 문자열 참조