PHP crypt() 함수란?
PHP의 crypt() 함수는 DES, Blowfish, MD5 등의 단방향 암호화 알고리즘을 사용하여 문자열을 해시(hash) 처리할 때 사용됩니다. 주로 비밀번호 저장과 같이 원본 값을 복원할 필요가 없는 경우에 활용됩니다.
참고 – crypt() 함수는 운영체제마다 지원하는 알고리즘이 다르기 때문에, 시스템에 따라 동작 방식이 달라질 수 있습니다.
crypt() 함수에서 사용 가능한 상수
crypt() 함수는 아래 상수들과 함께 사용되며, 각 상수는 서버에서 해당 해시 알고리즘의 지원 여부를 나타냅니다(지원 시 값이 1).
[CRYPT_STD_DES] – "./0-9A-Za-z" 문자 집합에서 가져온 2자리 솔트(salt)를 사용하는 표준 DES 기반 해시입니다.
[CRYPT_EXT_DES] – 언더스코어(_) 뒤에 반복 횟수 4바이트와 솔트 4바이트로 구성된 총 9자리 솔트를 사용하는 확장 DES 기반 해시입니다.
[CRYPT_MD5] – $1$로 시작하는 12자리 솔트를 사용하는 MD5 해시입니다.
[CRYPT_BLOWFISH] – $2a$, $2x$, 또는 $2y$로 시작하고, 두 자리 비용(cost) 파라미터 "$"와 "./0-9A-Za-z" 문자 집합의 22자리 문자로 구성된 솔트를 사용하는 Blowfish 해시입니다.
[CRYPT_SHA_256] – $5$로 시작하는 16자리 솔트를 사용하는 SHA-256 해시입니다.
[CRYPT_SHA_512] – $6$로 시작하는 16자리 솔트를 사용하는 SHA-512 해시입니다.
구문(Syntax)
crypt(str, salt)
매개변수(Parameters)
str – 해시 처리할 대상 문자열입니다. (필수)
salt – 해시 생성의 기준이 되는 솔트 문자열입니다. (선택 사항)
반환값(Return)
crypt() 함수는 해시된 인코딩 문자열을 반환합니다. 실패한 경우에는 13자 미만의 문자열을 반환하며, 이 문자열은 솔트와 반드시 다르다는 것이 보장됩니다.
사용 예제
아래 예제는 서버에서 표준 DES 알고리즘을 지원하는지 확인한 후, 문자열을 해시하여 출력합니다.
<?php
if (CRYPT_STD_DES == 1) {
echo "DES supported = ".crypt('demo','st')." ";
} else {
echo "DES not supported!";
}
?>
출력 결과(Output)
DES supported = st7zBedJadRn2
마무리 팁
crypt() 함수는 강력하지만 솔트 관리가 까다롭습니다. 최신 PHP 프로젝트에서는 보안성이 검증된 password_hash() 함수를 사용해 비밀번호를 해시하는 것이 권장됩니다. password_hash()는 내부적으로 적절한 알고리즘과 솔트를 자동으로 처리해 주므로 더욱 안전하고 간편합니다.