개발자 Q&A

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

2025.04.05 17:41

password_hash 함수 사용 시 예외 발생

목록
  • 반응형디자인매니아 1일 전 2025.04.05 17:41
  • 1
    1
저는 password_hash 함수를 사용하여 암호화한 후, 저장하고 다시 불러와 비교하는 코드를 작성하였는데, 다음과 같은 예외가 발생하였습니다.

php

$password = "1234";

$hashedPassword = password_hash($password, PASSWORD_DEFAULT);

$storedPassword = $hashedPassword;

$compareResult = password_verify($password, $storedPassword);



위 코드에서 password_verify 함수는 항상 false를 반환합니다. 저는 password_hash 함수의 결과를 다시 password_hash 함수에 넣어야 하는 이유를 모르겠습니다.

password_hash 함수의 결과를 다시 password_hash 함수에 넣는 이유는 무엇이며, 어떻게 하면 password_verify 함수가 항상 true를 반환할 수 있을까요?

    댓글목록

    profile_image
    나우호스팅  1일 전



    password_hash 함수의 결과를 다시 password_hash 함수에 넣는 이유는 암호화 알고리즘의 특성 때문입니다. password_hash 함수는 암호화 알고리즘을 자동으로 선택하여 암호화를 수행합니다. 이 알고리즘은 매번 암호화할 때마다 다르기 때문에, 암호화된 결과를 다시 암호화하는 과정을 거치면 암호화된 결과가 달라집니다.

    password_verify 함수는 암호화된 결과를 다시 암호화하는 과정을 거치지 않고, 암호화된 결과를 원래 암호로 비교합니다. 따라서 password_hash 함수의 결과를 다시 password_hash 함수에 넣으면, 암호화된 결과가 달라지기 때문에 password_verify 함수가 항상 false를 반환합니다.

    password_hash 함수의 결과를 다시 password_hash 함수에 넣지 않고, 원래 암호를 저장하고 password_verify 함수를 사용하면, 암호화된 결과가 원래 암호와 일치하는지 비교할 수 있습니다.

    예를 들어, 다음과 같이 코드를 작성할 수 있습니다.

    php
    
    
    $password = "1234";
    
    
    $hashedPassword = password_hash($password, PASSWORD_DEFAULT);
    
    
    $storedPassword = $hashedPassword;
    
    
    $compareResult = password_verify($password, $storedPassword);
    
    
    echo $compareResult; // 항상 true를 반환합니다.
    
    


    또한, password_hash 함수의 결과를 다시 password_hash 함수에 넣는 경우, password_hash 함수의 결과를 저장하고 password_verify 함수를 사용하는 것보다 더 안전합니다. password_hash 함수의 결과를 다시 password_hash 함수에 넣는 경우, 암호화된 결과가 원래 암호와 일치하는지 비교할 수 있습니다.

    예를 들어, 다음과 같이 코드를 작성할 수 있습니다.

    php
    
    
    $password = "1234";
    
    
    $hashedPassword = password_hash($password, PASSWORD_DEFAULT);
    
    
    $rehashedPassword = password_hash($hashedPassword, PASSWORD_DEFAULT);
    
    
    $compareResult = password_verify($hashedPassword, $rehashedPassword);
    
    
    echo $compareResult; // 항상 true를 반환합니다.
    
    


    따라서, password_hash 함수의 결과를 다시 password_hash 함수에 넣는 경우, password_hash 함수의 결과를 저장하고 password_verify 함수를 사용하는 것보다 더 안전합니다.

    2025-04-05 17:42

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

검색

게시물 검색