hash_equals

(PHP 5 >= 5.6.0, PHP 7, PHP 8)

hash_equals — 타이밍 공격 안전 문자열 비교


설명

hash_equals(string $known_string, string $user_string): bool

같은 시간을 사용하여 두 문자열이 같은지 여부를 비교합니다.

이 함수는 타이밍 공격을 완화하는 데 사용해야 합니다. 예를 들어 crypt() 암호 해시를 테스트할 때.


매개변수

known_string
비교할 길이가 알려진 문자열
user_string
사용자 제공 문자열

반환 값

두 문자열이 같으면 true를 반환하고 그렇지 않으면 false를 반환합니다.


오류/예외

제공된 매개변수 중 하나가 문자열이 아닌 경우 E_WARNING 메시지를 내보냅니다.


Examples

예제 #1 hash_equals() 예제

PHP 7.4.0부터 hash_algos()는 다음과 같은 알고리즘 이름 목록을 반환합니다.

                  
<?php
$expected  = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$correct   = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$incorrect = crypt('apple', '$2a$07$usesomesillystringforsalt$');

var_dump(hash_equals($expected, $correct));
var_dump(hash_equals($expected, $incorrect));
?>
                  
                

위의 예는 다음을 출력합니다.

bool(true)
bool(false)
                

노트

메모: 성공적으로 비교하려면 두 인수의 길이가 같아야 합니다. 다른 길이의 인수가 제공되면 false가 즉시 반환되고 타이밍 공격의 경우 알려진 문자열의 길이가 누출될 수 있습니다.

메모: 사용자 제공 문자열을 첫 번째 매개변수가 아닌 두 번째 매개변수로 제공하는 것이 중요합니다.