Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP crypt() 함수 완벽 정리 – 문자열 해싱 방법과 사용 예제

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()는 내부적으로 적절한 알고리즘과 솔트를 자동으로 처리해 주므로 더욱 안전하고 간편합니다.