현재 위치: > 최신 기사 목록> 잘못된 소금 값을 사용하면 암호를 확인할 수 없습니다.

잘못된 소금 값을 사용하면 암호를 확인할 수 없습니다.

M66 2025-05-20

PHP에서 Crypt () 함수는 종종 암호를 암호화하는 데 사용됩니다. 표준 DES, MD5, SHA-256 및 SHA-512와 같은 다양한 해싱 알고리즘을 지원할 수 있으며 그 행동은 들어오는 "소금 값"에 달려 있습니다. 소금 값은 암호의 복잡성을 증가시킬뿐만 아니라 해싱의 방법과 결과를 결정합니다. 소금 값이 올바르지 않으면 사용자가 올바른 원래 비밀번호를 입력하더라도 확인을 전달할 수 없습니다.

crypt () 함수의 기본 사용

crypt () 의 기본 구문은 다음과 같습니다.

 $hashed_password = crypt('원래 비밀번호', '소금 가치');

확인 중에 사용자가 입력 한 암호는 일반적으로 이전에 저장된 해시를 소금 값으로 사용하여 다시 암호화됩니다.

 if (crypt($input_password, $stored_hash) === $stored_hash) {
    // 올바른 비밀번호
}

여기서 핵심 점은 다음과 같습니다. 해시 자체는 완전히 일관된 알고리즘 및 염 값을 사용하도록하기 위해 소금 값의 일부로 전달됩니다 .

소금 가치의 역할

소금 가치에는 두 가지 주요 기능이 있습니다.

  1. 레인보우 테이블 공격 방지 : 두 사용자가 동일한 비밀번호를 사용하더라도 다른 소금 값을 추가 한 후 해시 결과가 다릅니다.

  2. 암호화 알고리즘 과 사용할 매개 변수를 알려줍니다.

예를 들어, 다음 소금 값은 SHA-512 알고리즘의 사용을 지정하고 5000 회 반복합니다.

 $salt = '$6$rounds=5000$usesomesillystringforsalt$';

다른 소금 값으로 동일한 암호를 다시 암호화하려고하면 (하나만 다르더라도) 결과는 완전히 다릅니다. 이것은 해시 함수의 특성입니다. 약간의 변화는 출력 결과에 큰 차이를 초래할 것입니다 .

잘못된 소금 값을 사용한 결과

시나리오를 상상해보십시오 :

 $original_hash = crypt('mySecretPassword', '$6$rounds=5000$m66.net$');

사용자가 다시 로그인하면 프로그램은 다음과 같이 확인합니다.

 if (crypt('mySecretPassword', '$6$rounds=5000$wrongdomain.com$') === $original_hash) {
    echo '올바른 비밀번호';
} else {
    echo '오류 비밀번호';
}

사용자가 올바른 비밀번호를 입력했지만 Crypt ()는 소금 값이 다르기 때문에 완전히 다른 해시를 생성하여 검증이 실패합니다.

그것은 동일한 레시피 (비밀번호)를 사용하는 것과 같지만 다른 성분 (소금)을 사용하는 것과 같습니다. 접시 (해시)는 자연스럽게 다릅니다.

일반적인 오류 및 모범 사례

잘못된 연습 :

  • 확인할 때마다 새로운 임의의 소금 값을 생성하십시오.

  • 원래 해시 값은 검증 중에 소금 값으로 사용되지 않습니다.

  • 저장된 해시 값을 수동으로 자르거나 수정합니다.

올바른 방법 :

  • password_hash ()password_verify () 와 같은 고급 API를 사용하면 소금 값과 알고리즘을 자동으로 관리합니다.

  • crypt ()를 사용하는 경우 원래 해시는 항상 검증 할 때 소금 값으로 사용됩니다.