현재 위치: > 최신 기사 목록> crypt ()와 password_hash ()의 차이점은 무엇입니까?

crypt ()와 password_hash ()의 차이점은 무엇입니까?

M66 2025-05-20

PHP에서 암호 암호화를 처리 할 때 Crypt ()Password_hash ()를 사용하여 암호의 해시 값을 생성 할 수 있지만이 두 기능 간에는 명백한 차이가 있습니다. 암호화 기능을 선택할 때는 응용 프로그램의 보안을 보장하는 데 각각의 원칙과 장점을 이해하는 것이 중요합니다.

1. crypt () 함수의 개요

crypt () 는 유닉스 시스템으로 거슬러 올라갈 수있는 오랜 암호화 기능입니다. 제공하는 소금 값과 시스템에서 지원하는 알고리즘에 따라 다양한 암호화 알고리즘 (예 : DES, MD5, SHA-256, SHA-512)을 지원합니다.

예:

 $password = 'mySecretPassword';
$salt = '$6$rounds=5000$anexamplesaltstring$'; // 사용 SHA-512
$hash = crypt($password, $salt);

생성 된 $ HASH는 제공된 소금 형식을 기반으로 암호화 알고리즘을 선택합니다. 이 예에서는 SHA-512가 사용됩니다.

2. password_hash () 함수의 개요

Password_hash () 는 PHP 5.5 이후에 도입 된 최신 암호 해시 기능입니다. 기본적으로 BCrypt 알고리즘을 사용하며 최신 버전 (PHP 7.2 이후)에서 Argon2IArgon2ID 도 지원합니다. 암호 해싱을 위해 설계되었으며 소금 값과 비용 요인을 자동으로 관리하여 안전한 코딩 노력을 크게 단순화합니다.

예:

 $password = 'mySecretPassword';
$hash = password_hash($password, PASSWORD_DEFAULT); // 默认사용 bcrypt

생성 된 $ HASH는 개발자의 수동 설정이 필요없는 알고리즘 정보, 비용 및 소금이 포함 된 문자열입니다.

3. 핵심 차이 비교

특성 토굴() password_hash ()
소금 가치 관리 개발자가 수동으로 설정해야합니다 자동으로 생성됩니다
연산 다양한, 지정해야합니다 기본 BCrypt는 Argon2를 지원합니다
보안 구현 및 구성에 따라 다릅니다 모범 사례에 따라 기본적으로 보안
사용 편의성 복잡하고 오류가 발생하기 쉽습니다 간단하고 사용하기 쉽습니다
권장 학위 새로운 프로젝트에 권장되지 않습니다 적극 권장됩니다

4. password_hash ()를 선택하는 것이 더 적절한 이유는 무엇입니까?

? 더 강력한 보안

Password_hash () 에서 사용하는 알고리즘은 암호 해싱 암호 (예 : BCryptArgon2 ) 용으로 설계되었으며 GPU 가속 공격과 같은 최신 암호 크래킹 기술에 저항 할 수 있습니다.

? 높은 유지 가능성

php는 password_default 상수를 사용하여 코드를 변경하지 않고도 안전한 알고리즘으로 자동 전환 할 수 있습니다. 예를 들어:

 $hash = password_hash($password, PASSWORD_DEFAULT);

PHP가 업데이트되면 Password_Default는 BCrypt 에서 Argon2ID 로 전환하는 것과 같은 더 강력한 알고리즘을 자동으로 채택합니다.

? 더 적은 오류

Password_hash ()는 소금 값과 비용 요인을 자동으로 처리하기 때문에 사람 설정 오류로 인한 보안 문제가 크게 줄어 듭니다.

5. URL 관련 응용 프로그램 시나리오

예를 들어 다음 형식의 등록 처리 스크립트와 같은 사용자 인증 시스템을 구축하는 경우 다음과 같습니다.

 if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $password = $_POST['password'];
    $hash = password_hash($password, PASSWORD_DEFAULT);

    // 데이터베이스에 저장하십시오
    $conn = new PDO('mysql:host=localhost;dbname=example', 'user', 'pass');
    $stmt = $conn->prepare('INSERT INTO users (username, password) VALUES (?, ?)');
    $stmt->execute([$_POST['username'], $hash]);

    header('Location: https://m66.net/login-success');
}

이 경우 Password_hash ()를 사용하는 것은 훨씬 더 안전하고 현대적이며, 시스템의 보안 및 유지 보수 가능성을 오랫동안 유지할 수 있습니다.

결론적으로

crypt () 는 여전히 사용할 수 있지만 Password_hash ()는 보안, 사용 편의성 및 향후 유지 관리의 관점에서 더 적합한 선택입니다. 특히 사용자 암호가 처리되는 시나리오에서는 사용자 입력을 확인하고 안전한 PHP 응용 프로그램을 구축하기 위해 Password_Verify () 와 함께 사용해야합니다.