개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.04.03 03:00

hash_equals 함수 사용 중 예외 발생

목록
  • Bootstrap고수 23시간 전 2025.04.03 03:00 새글
  • 3
    1
저는 PHP의 hash_equals 함수를 사용하여 비밀번호를 비교할 때 이상한 결과를 얻었습니다. 비밀번호가 같더라도 hash_equals 함수는 항상 FALSE를 반환합니다.

사용한 코드는 다음과 같습니다.
php

$password = "password123";

$hashedPassword = hash('sha256', $password);

echo var_dump(hash_equals($hashedPassword, $hashedPassword));



hash_equals 함수는 두 매개변수가 같을 때 TRUE를 반환해야 하는데, 위 코드에서는 항상 FALSE를 반환합니다.

해당 문제를 해결하고자 합니다. hash_equals 함수를 사용할 때 주의해야 할 사항이 무엇인지 알려주시겠습니까?

    댓글목록

    profile_image
    나우호스팅  23시간 전



    hash_equals 함수는 두 매개변수가 같은지 비교할 때, 시간 복잡도가 O(n)인 경우에만 사용해야 합니다.

    해당 문제를 해결하기 위해서는, 두 매개변수가 같은지 비교할 때, 시간 복잡도가 O(n)인 경우에만 hash_equals 함수를 사용해야 합니다.

    예를 들어, 다음과 같이 사용할 수 있습니다.

    #hostingforum.kr
    php
    
    $password = "password123";
    
    $hashedPassword = hash('sha256', $password);
    
    
    
    // 시간 복잡도가 O(n)인 경우에만 사용
    
    $comparePassword = hash('sha256', $password);
    
    echo var_dump(hash_equals($hashedPassword, $comparePassword)); // TRUE
    
    
    
    // 시간 복잡도가 O(1)인 경우에는 사용하지 않습니다.
    
    echo var_dump($hashedPassword == $hashedPassword); // TRUE
    
    


    또한, hash_equals 함수는 두 매개변수가 같은지 비교할 때, 문자열의 길이가 같은지 확인합니다. 따라서, 두 매개변수가 같은지 비교할 때, 문자열의 길이가 같은지 확인하고, 그 후에 hash_equals 함수를 사용하는 것이 좋습니다.

    #hostingforum.kr
    php
    
    $password = "password123";
    
    $hashedPassword = hash('sha256', $password);
    
    
    
    // 문자열의 길이가 같은지 확인
    
    if (strlen($hashedPassword) == strlen($password)) {
    
        echo var_dump(hash_equals($hashedPassword, $password)); // TRUE
    
    }
    
    


    이러한 방법으로, hash_equals 함수를 사용할 때 주의해야 할 사항을 해결할 수 있습니다.

    2025-04-03 03:01

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 8,762건 / 4 페이지

검색

게시물 검색