현재 위치: > 최신 기사 목록> 다른 버전의 PHP에서 crypt () 함수의 동작 차이는 무엇입니까? 이러한 차이가 응용 프로그램에 미치는 영향을 어떻게 이해합니까?

다른 버전의 PHP에서 crypt () 함수의 동작 차이는 무엇입니까? 이러한 차이가 응용 프로그램에 미치는 영향을 어떻게 이해합니까?

M66 2025-05-22

PHP의 Crypt () 함수는 문자열 암호화 (일반적으로 암호)를위한 핵심 함수입니다. 시스템의 기본 암호화 알고리즘을 기반으로하고 입력 문자열을 해시하여 비밀번호의 보안 저장 및 검증을 달성합니다. Crypt () 함수의 기본 사용법과 목적은 PHP 버전에서 일관되지만 내부 구현 및 PHP 및 운영 체제 버전이 변경됨에 따라 지원되는 알고리즘에는 몇 가지 중요한 차이가 있습니다. 이러한 차이는 비밀번호 보안 및 응용 프로그램 호환성에 직접적인 영향을 미치며 안전하고 안정적인 응용 프로그램을 개발하는 데 필수적입니다.

1. crypt () 함수의 기본 사용법 검토

crypt ()는 두 매개 변수를 수락합니다.

 $hashed_password = crypt($password, $salt);
  • $ 비밀번호 는 일반 텍스트 비밀번호 또는 모든 문자열입니다.

  • $ 소금은 암호화 알고리즘의 소금 값을 제어하는 ​​데 사용됩니다. 다른 형식은 암호화 알고리즘의 선택을 결정합니다.

리턴 값은 암호화 된 문자열입니다. 비밀번호를 확인할 때 동일한 소금을 사용하여 암호를 다시 암호화하여 결과가 일관되는지 여부를 비교합니다.

2. 다른 PHP 버전에서 crypt () 의 동작 차이

1. 암호화 알고리즘의 지원 범위는 다릅니다

  • 초기 PHP 버전 (PHP 4.X, PHP 5.2 및 이전)

    • 시스템에서 제공하는 표준 DES 암호화 만 (56 비트 키를 기반으로, 소금은 2 자)이며 보안이 낮습니다.

    • 제공된 소금 형식이 잘못된 경우 Crypt ()는 DES 암호화를 사용하여 퇴보합니다.

  • PHP 5.3 이상

    • MD5와 같은보다 현대적인 암호화 알고리즘 (Salt Format은 $ 1 $ 로 시작)을 지원하기 시작합니다.

    • Blowfish도 지원됩니다 (Salt Format은 PHP 버전에 따라 $ 2A $ 또는 $ 2Y $ 로 시작합니다),

    • SHA-256 ( $ 5 $ ) 및 SHA-512 ( $ 6 $ )와 같은 알고리즘이 운영 체제의 LIBC 라이브러리가 지원하는 것이 제공됩니다.

  • php 7.x

    • Blowfish 지원을 계속 개선하고 역사상 일부 보안 취약점 (예 : $ 2A $ )을 수정하십시오.

    • PHP 7.3은 나중에 더 안전한 Blowfish 버전 인 $ 2y $ 태그를 소개했습니다.

    • 다른 시스템에 대한 지원이 높고 더 많은 알고리즘이 지원됩니다.

  • php 8.x

    • 위의 알고리즘에 대한 지원을 유지하고 보안 및 호환성에주의하십시오.

    • PHP의 기본 비밀번호 해시 함수 암호 _hash ()password_verify () 를 사용하는 것이 좋습니다. 그러나 crypt ()는 여전히 사용 가능합니다.

2. Crypt () 지원에 대한 다양한 운영 체제의 영향

crypt () 함수는 실제로 운영 체제의 LIBC 라이브러리 (예 : GNU LIBC, BSD LIBC)에 의존하여 암호화 작업을 완료합니다.

  • 지원되는 알고리즘은 다른 운영 체제 (Linux, FreeBSD, Windows)에서 동일한 PHP 버전에 대해 완전히 일관되지 않을 수 있습니다.

  • Windows의 Crypt () 지원은 매우 제한적이며 일반적으로 기존 DES 암호화 만 지원합니다.

  • Linux는 일반적으로 LIBC 버전에 따라 여러 알고리즘을 지원합니다.

III. 이러한 차이가 응용 프로그램에 미치는 영향

1. 비밀번호 보안

다른 암호화 알고리즘 사이에는 보안에 큰 차이가 있습니다. 초기 DES 암호화 알고리즘은 쉽게 갈라졌으며 더 이상 생산 환경에서 사용해서는 안됩니다. 최신 알고리즘 (예 : Blowfish, SHA-512)을 지원하는 PHP 버전 및 운영 체제는 비밀번호 스토리지의 보안을 크게 향상시킬 수 있습니다.

2. 코드 호환성 및 이식성

  • 응용 프로그램이 crypt () 에 의존하고 Salt 형식을 명시 적으로 지정하지 않으면 PHP 버전을 업그레이드하거나 운영 체제를 마이그레이션 할 때 암호 확인 실패가 발생할 수 있습니다.

  • 예를 들어, 이전 시스템은 DES로만 암호화되어 마이그레이션 후 SHA-512가되어 새 시스템이 이전 비밀번호를 올바르게 확인할 수 없습니다.

  • 따라서 응용 프로그램에서 Salt 형식을 명시 적으로 지정하거나보다 현대적인 암호 처리 인터페이스를 채택하는 것이 좋습니다.

3. 권장 대안

PHP 공무원은 Password_hash ()Password_verify ()를 버전 5.5에 도입하여 암호 암호화 및 확인의 세부 사항을 캡슐화했습니다.

 $hash = password_hash($password, PASSWORD_DEFAULT);  // 기본적으로 사용됩니다 bcrypt
if (password_verify($password, $hash)) {
    echo "비밀번호 확인이 성공했습니다";
}
  • 이 인터페이스에는 호환성이 우수하고 보안이 높으며 가장 안전한 알고리즘을 자동으로 선택할 수 있습니다.

  • crypt ()를 직접 사용하는 복잡성과 호환성 문제를 피하십시오.

  • 향후 버전에서는 Crypt ()을 직접 호출하는 대신이 솔루션을 권장합니다.

4. 샘플 코드 데모

다음 예제는 소금이 다른 crypt ()를 호출하는 방법을 보여주고 암호화 결과의 차이점을 보여줍니다.