현재 위치: > 최신 기사 목록> Hash_final 및 Hash_equals를 사용하여 해시 값을 비교하는 방법

Hash_final 및 Hash_equals를 사용하여 해시 값을 비교하는 방법

gitbox 2025-05-29

Hash_final은 해시 컨텍스트에서 최종 해시 값을 얻는 PHP의 함수입니다. 일반적으로 Hash_final은 Hash_initHash_update 기능과 함께 사용하여 점차 해시 값을 구축합니다. Hash_Final 에 의해 생성 된 해시 값은 불변입니다.

hash_final function syntax :

 string hash_final ( resource $context [, bool $raw_output = false ] )
  • $ 컨텍스트 : Hash_initHash_update 와 같은 함수를 통해 생성 된 해시 컨텍스트.

  • $ raw_output : true 인 경우 원래 바이너리 데이터가 반환됩니다. False (기본값) 인 경우 16 진 문자열이 반환됩니다.

예:

 <?php
$data = "Hello, World!";
$context = hash_init('sha256');
hash_update($context, $data);
$hash = hash_final($context);

echo "Hash value: " . $hash;
?>

출력 결과 :

 Hash value: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda01c8007c6f4adf4a0a2

이 예에서는 Hash_Init을 사용하여 SHA-256 해시 컨텍스트를 초기화하고 Hash_update를 사용하여 해시 데이터를 업데이트하고 Hash_Final을 통해 최종 해시 값을 얻습니다.

2. Hash_equals 기능 소개

Hash_equals 함수는 PHP의 함수로 두 개의 해시 값을 안전하게 비교하는 데 사용됩니다. 시간 공격을 방지하는 핵심 도구입니다. Hash_equals 가 없으면 Simple == 운영자 비교 해시 값은 다른 문자열 길이로 인해 시간 누출을 유발할 수 있으며, 해커가 특정 정보를 추측하도록 악용 할 수 있습니다.

Hash_equals는 두 문자열의 해시 값을 비교하여 동시에 소비하여 시간 공격을 피합니다.

Hash_equals 함수 구문 :

 bool hash_equals ( string $known_string , string $user_string )
  • $ 알려진_string : 알려진 해시 값 (일반적으로 데이터베이스에 저장된 해시 값).

  • $ user_string : 사용자가 입력 한 해시 값.

예:

 <?php
$stored_hash = "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda01c8007c6f4adf4a0a2";
$user_input = "Hello, World!";

if (hash_equals($stored_hash, hash('sha256', $user_input))) {
    echo "The hashes match.";
} else {
    echo "The hashes do not match.";
}
?>

출력 결과 :

 The hashes match.

이 예에서 Hash_equals는 저장된 해시 값을 사용자 입력 해시 값과 안전하게 비교하는 데 사용됩니다. 두 해시가 같으면 입력이 정확하다는 것을 의미합니다.

3. Hash_finalHash_equals를 조합하여 사용하십시오

일반적으로 해시 값을 계산하고 안전하게 비교할 수 있도록 Hash_finalHash_equals를 함께 사용합니다. 예를 들어, 비밀번호 검증을 처리 할 때 먼저 Hash_Final을 사용하여 암호의 해시 값을 생성 한 다음 Hash_equals를 사용하여 사용자가 입력 한 암호를 데이터베이스에 저장된 HASH 값과 안전하게 비교합니다.

Complete example:

 <?php
// 사용자가 제출 한 암호를 가정하십시오
$user_input_password = "user_password123";

// 비밀번호 해시는 데이터베이스에 저장됩니다(예에서 하드 코드)
$stored_password_hash = "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda01c8007c6f4adf4a0a2";

// 통과하다 hash_final 입력 암호의 해시 값을 계산하십시오
$context = hash_init('sha256');
hash_update($context, $user_input_password);
$user_input_hash = hash_final($context);

// 사용 hash_equals 비밀번호 해시 값을 안전하게 비교하십시오
if (hash_equals($stored_password_hash, $user_input_hash)) {
    echo "Password is correct.";
} else {
    echo "Password is incorrect.";
}
?>

출력 결과 :

 Password is correct.

이 예에서는 hash_final을 사용하여 사용자 입력 암호의 해시 값을 계산 한 다음 해시 _equals를 통해 저장된 해시 값과 비교합니다. 이런 식으로, 우리는 해시 비교의 보안을 보장하고 가능한 시간 공격을 방지합니다.