현재 위치: > 최신 기사 목록> 데이터베이스 암호화 비밀번호에 crypt ()를 저장합니다

데이터베이스 암호화 비밀번호에 crypt ()를 저장합니다

M66 2025-06-02

웹 개발에서는 사용자 비밀번호의 보안 저장이 중요합니다. PHP에는 비밀번호 보호에 사용할 수있는 여러 암호화 방법이 있지만 Crypt () 기능은 여전히 ​​고전적이고 효과적인 도구입니다. 이를 통해 개발자는 Blowfish와 같은 다양한 해싱 알고리즘을 사용하여 돌이킬 수없는 암호화 문자열을 생성 할 수 있습니다. 이 기사는 Crypt () 함수를 데이터베이스와 결합하여 안전한 사용자 비밀번호 저장을 달성하는 방법을 설명합니다.

1. crypt () 함수의 기본 사용법을 이해하십시오

PHP의 crypt () 함수는 일방 통행 암호화에 사용되며 두 매개 변수를 수용합니다.

 string crypt ( string $string , string $salt )
  • $ string 은 암호화 할 원래 문자열입니다 (일반적으로 비밀번호)

  • $ salt는 암호화 결과에 영향을 미치는 문자열입니다. 다른 소금은 다른 암호화 결과를 생성합니다.

Blowfish 알고리즘을 사용하여 암호화하려면 예를 들어 소금을 포맷해야합니다.

 $salt = '$2y$10$' . bin2hex(random_bytes(11));
$hashed_password = crypt('user_password', $salt);

$ 2Y $ 10 $는 Blowfish 알고리즘과 10 라운드의 암호화를 사용하는 것을 의미합니다.

2. 데이터베이스에 연결하고 암호화 된 비밀번호를 저장하십시오.

암호화 된 암호를 데이터베이스에 저장하려면 사용자 테이블이 필요합니다. 간단한 사용자 테이블 구조는 다음과 같습니다.

 CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
);

그런 다음 PHP를 사용하여 데이터베이스에 연결하고 사용자 데이터를 삽입하십시오.

 <?php
$pdo = new PDO("mysql:host=localhost;dbname=testdb;charset=utf8", "dbuser", "dbpass");

$username = 'testuser';
$password = 'mypassword';

// 생성하다salt암호를 암호화합니다
$salt = '$2y$10$' . bin2hex(random_bytes(11));
$hashed_password = crypt($password, $salt);

// 데이터베이스에 삽입하십시오
$stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)");
$stmt->execute([
    ':username' => $username,
    ':password' => $hashed_password
]);
?>

3. 사용자 비밀번호를 확인하십시오

로그인 할 때는 단순히 일반 텍스트 비밀번호를 비교할 수 없습니다. 사용자 테이블의 저장된 암호 암호를 소금으로 저장된 암호와 함께 Crypt () 기능을 다시 사용해야합니다.

 <?php
$input_password = 'mypassword';
$username = 'testuser';

$stmt = $pdo->prepare("SELECT password FROM users WHERE username = :username");
$stmt->execute([':username' => $username]);
$stored_hash = $stmt->fetchColumn();

if (crypt($input_password, $stored_hash) === $stored_hash) {
    echo "비밀번호 확인이 성공했습니다。";
} else {
    echo "오류 비밀번호。";
}
?>

4. 안전 보충 제안

crypt () 함수는 안전하지만 점차 Password_hash ()password_verify () 로 대체되었습니다. Crypt () 는 이전 시스템과의 역 호환성이 필요한 시나리오에 더 적합합니다.

그러나 crypt ()를 사용할 때주의를 기울여야합니다.

  1. 항상 강한 무작위 소금을 사용하고 고정 값을 사용하지 마십시오.

  2. 무차별 인력 균열 비용을 증가시키기 위해 암호화 라운드 수 (예 : $ 2Y $ 10 $ )를 제어하십시오.

  3. HTTPS를 사용하여 프론트 엔드와 백엔드를 연결하여 전송 중에 암호가 차단되는 것을 방지하십시오.

  4. 예를 들어 URL에서 민감한 데이터를 전달하지 마십시오.