현재 위치: > 최신 기사 목록> PHP의 crypt () 함수를 사용하여 안전한 사용자 등록 및 로그인 시스템을 만드는 방법?

PHP의 crypt () 함수를 사용하여 안전한 사용자 등록 및 로그인 시스템을 만드는 방법?

M66 2025-06-23

사용자 인증 시스템의 보안은 웹 사이트 나 응용 프로그램을 구축 할 때 중요한 고려 사항입니다. PHP는 암호 암호화 및 검증을 구현하는 다양한 방법을 제공하며, 그중에 Crypt () 함수는 클래식하고 강력한 암호화 도구입니다. 이 기사에서는 Crypt () 함수를 사용하여 암호 암호화, 확인 및 사용자 데이터 처리를 포함하여 안전한 사용자 등록 및 로그인 시스템을 구축하는 방법을 설명합니다.

1. crypt () 함수 소개

crypt () 는 일방 통행 해시 알고리즘을 사용하여 문자열을 암호화하는 PHP가 제공하는 암호화 함수입니다. 제공된 SALT (SALT) 형식에 따라 다양한 암호화 알고리즘 (예 : MD5, SHA-256, SHA-512 및 Blowfish)을 지원합니다.

 string crypt ( string $str , string $salt )

소금 의 가치는 암호화 알고리즘의 유형과 동작을 결정합니다. 보안의 경우 SHA-512 또는 Blowfish를지지하는 소금을 사용하는 것이 좋습니다.

2. 사용자 등록 프로세스

사용자를 등록 할 때는 데이터베이스가 유출 되더라도 공격자가 암호를 쉽게 복원 할 수 없도록 데이터베이스에 비밀번호를 입금하기 전에 비밀번호를 암호화해야합니다.

샘플 코드 : 사용자 등록

 <?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    // 강한 소금을 만들고 암호를 암호화하십시오(사용SHA-512)
    $salt = '$6$' . bin2hex(random_bytes(16)) . '$';  // SHA-512
    $hashed_password = crypt($password, $salt);

    // 데이터베이스에 사용자 이름 및 암호화 된 비밀번호를 저장하십시오(~에 의해SQLite예로)
    $db = new PDO('sqlite:users.db');
    $stmt = $db->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
    $stmt->execute([$username, $hashed_password]);

    echo "성공적으로 등록되었습니다,제발 <a href='https://m66.net/login.php'>로그인하십시오</a>。";
}
?>

HTML 등록 양식 :

 <form method="POST" action="">
    사용자 이름:<input type="text" name="username" required><br>
    비밀번호:<input type="password" name="password" required><br>
    <input type="submit" value="등록하다">
</form>

3. 사용자 로그인 프로세스

로그인 할 때 원래 비밀번호를 알 필요가 없습니다. 데이터베이스에서 동일한 소금을 사용하여 사용자가 입력 한 암호를 암호화하고 저장된 해시와 비교하십시오.

샘플 코드 : 사용자 로그인

 <?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password_input = $_POST['password'];

    $db = new PDO('sqlite:users.db');
    $stmt = $db->prepare("SELECT password FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($row) {
        $hashed_password = $row['password'];
        if (crypt($password_input, $hashed_password) === $hashed_password) {
            echo "로그인하십시오成功!다시 오신 것을 환영합니다,{$username}。";
        } else {
            echo "비밀번호错误。";
        }
    } else {
        echo "사용자는 존재하지 않습니다。";
    }
}
?>

HTML 로그인 양식 :

 <form method="POST" action="">
    사용자 이름:<input type="text" name="username" required><br>
    비밀번호:<input type="password" name="password" required><br>
    <input type="submit" value="로그인하십시오">
</form>

4. 데이터베이스 구조 예 (SQLITE)

 CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT UNIQUE NOT NULL,
    password TEXT NOT NULL
);

5. 안전 조언

  • HTTPS 사용 : 암호화 된 연결을 통해 모든 형태의 전송이 수행되도록하십시오.

  • CSRF 보호 추가 : 크로스 사이트 요청 위조 공격 방지.

  • 로그인 시도 수를 제한하십시오 : 무차별 력 균열 방지.

  • PHP 버전 업데이트 시간 : 암호화 알고리즘과 기능을 안전하게 유지하십시오.

  • 보다 최신 기능 (예 : Password_hash)을 사용하는 경우이 기사의 논리를 참조 할 수 있습니다 . crypt ()는 유효하지만 최신 PHP는 Password_hash ()Password_Verify ()를 사용하여 권장합니다.

결론

Crypt () 함수와 함께 제공되는 비밀번호 검증 로직을 합리적으로 사용하면 비교적 안전한 사용자 인증 시스템을 구축 할 수 있습니다. Modern PHP는 Password_hash () 와 같은 고급 인터페이스를 제공하지만 Crypt ()의 작동 방식을 이해하면 여전히 암호 암호화의 특성을 깊이 이해하는 데 도움이 될 수 있습니다. Crypt () 는 여전히 일부 낮은 버전의 PHP 환경 또는 특수 호환성 요구 사항에서 실질적인 선택입니다.