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
가 즉시 반환되고 타이밍 공격의 경우 알려진 문자열의 길이가 누출될 수 있습니다.
메모: 사용자 제공 문자열을 첫 번째 매개변수가 아닌 두 번째 매개변수로 제공하는 것이 중요합니다.