update : 2015.11.03
php.shukuma.com

검색:
 
 
단방향 문자열 암호화(해시)

crypt

(PHP 4, PHP 5)

crypt단방향 문자열 암호화(해시)

설명

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

crypt()는 표준 유닉스 DES 기반 암호화 알고리즘이나 시스템에서 사용할 수 있는 다양한 알고리즘을 사용하여 암호화한 문자열을 반환합니다.

몇몇 운영체제는 한가지 이상의 암호화 방식을 제공합니다. 사실, 종종 표준 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가 한번 생성되어진 점에 주의해야 합니다. 이 함수를 반복적으로 호출하면, 표현과 보안에 모두 영향을 줍니다.

반환값

암호화된 문자열을 반환합니다.

변경점

버전 설명
5.3.0 시스템에서 지원하지 않는 MD5 암호화, 표준 DES, 확장 DES, Blowfish 알고리즘에 대해서 PHP의 구현을 가집니다.

예제

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 페이지