crypt
(PHP 4, PHP 5)
crypt — 단방향 문자열 암호화(해시)
설명
string crypt
( string $str
[, string $salt
] )
몇몇 운영체제는 한가지 이상의 암호화 방식을 제공합니다. 사실, 종종 표준
DES 기반 암호화는 MD5 기반 암호화 알고리즘으로 대체되기도 합니다. 암호화
타입은 slat 인수에 의해 변경됩니다. 설치시에, PHP는 사용할 수 있는 암호화
함수를 판단하고, 다른 암호화 방식을 위한 salt를 받아들입니다. salt를
지정하지 않으면, PHP는 기본값으로 두 문자 salt를 자동 생성합니다. 단,
시스템의 기본 암호화 방식이 MD5라면, 무작위의 MD5 호환 salt를 생성합니다.
PHP는 CRYPT_SALT_LENGTH
상수를 설정하여, 시스템에서
일반적인 두 문자 salt가 적용되는지, 혹은 12 문자 salt를 받아들일 수 있는지
알려줍니다.
표준 DES 기반 암호화 crypt()는 처음 두 문자가 salt 인
문자열을 출력합니다. 또한 str
의 처음 8 문자만
사용하기에, 같은 8문자로 시작하는 긴 문자열은 (같은 salt를 사용하는 한)
같은 결과를 생성합니다.
crypt() 함수가 다양한 암호화 방식을 지원하는 시스템에서, 주어진 방식의
사용 가능 여부에 따라 다음 상수들이 0이나 1로 설정됩니다:
-
CRYPT_STD_DES
- 2문자 salt를 가지는 표준 DES 기반 암호화
-
CRYPT_EXT_DES
- 9문자 salt를 가지는 확장 DES 기반 암호화
-
CRYPT_MD5
- $1$로 시작하는 12문자 salt를 가지는 MD5 암호화
-
CRYPT_BLOWFISH
- $2$나 $2a$로 시작하는 16문자 salt를 가지는 Blowfish 암호화
Note:
PHP 5.3.0부터, 시스템에서 지원하지 않는 알고리즘에 대해서 PHP의 구현을
가집니다.
인수
-
str
-
암호화할 문자열.
-
salt
-
암호화에 사용할 선택적인 salt 문자열. 주어지지 않으면, 이 함수를 호출할
때마다 PHP가 임의로 생성합니다.
salt를 제공하여 사용하면, salt가 한번 생성되어진 점에 주의해야 합니다.
이 함수를 반복적으로 호출하면, 표현과 보안에 모두 영향을 줍니다.
예제
Example #1 crypt() 예제
<?php
$password = crypt('mypassword'); // salt 자동 생성
/* 패스워드를 비교할 때, 다른 해싱 알고리즘을 사용하는 문제를
피하기 위해서, crypt()가 생성한 전체 결과를 salt로 주어야
합니다. (위에서 밝혔듯이, 표준 DES 기반 암호 해싱은 2 문자
salt를 사용하지만, MD5 기반 해싱은 12 문자를 사용합니다) */
if (crypt($user_input, $password) == $password) {
echo "패스워드 확인!";
}
?>
Example #2 htpasswd와 crypt() 사용하기
<?php
// password 설정
$password = 'mypassword';
// salt 자동 생성으로 해시 획득
$hash = crype($password);
Example #3 다양한 암호화 형식으로 crypt() 사용하기
<?php
if (CRYPT_STD_DES == 1) {
echo '표준 DES: ' . crypt('rasmuslerdorf', 'rl') . "\n";
}
if (CRYPT_EXT_DES == 1) {
echo '확장 DES: ' . crypt('rasmuslerdorf', 'J9..rasm') . "\n";
}
if (CRYPT_MY5 == 1) {
echo 'MD5: ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n";
}
if (CRYPT_STD_DES == 1) {
echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$rasmuslerd...........$') . "\n";
}
?>
표준 DES: rl.3StKT.4T8M
확장 DES: _J9..rasmBYk8r9AiWNc
MD5 : $1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish:
$2a$07$rasmuslerd............nIdrcHdxcUxWomQX9j6kvERCFjTg7Ra
주의
Note:
crypt()는 단방향 알고리즘을 사용하기 때문에, 복호화
함수는 없습니다.
참고
- md5() - 문자열의 md5 해시를 계산
- Mcrypt 확장
- 자세한 정보를 위해 crypt 함수에 관한 유닉스 man 페이지