>  Q&A  >  본문

PHP의 비밀번호 해시를 사용하여 비밀번호를 해시하고 확인하는 방법

<p>최근에 저는 인터넷에서 우연히 발견한 로그인 스크립트에 저만의 보안을 구현하려고 노력하고 있습니다. 각 사용자에 대한 솔트를 생성하기 위해 스크립트를 직접 만드는 방법을 배우려고 애쓰다가 우연히 <code>password_hash</code>를 발견했습니다. </p> <p>제가 이해한 바에 따르면(이 페이지를 읽은 것을 토대로) <code>password_hash</code>를 사용하면 솔트가 해당 행에 이미 생성됩니다. 이게 진짜야? </p> <p>또 다른 질문은, 소금을 두 가지 종류로 섭취하는 것이 현명하지 않을까요? 하나는 파일에 직접 있고 다른 하나는 데이터베이스에 있습니까? 이렇게 하면 누군가 데이터베이스의 솔트를 손상시킨 경우에도 솔트를 파일에 직접 저장할 수 있습니까? 나는 여기서 소금을 저장하는 것이 결코 현명한 생각이 아니라는 것을 읽었습니다. 그러나 사람들이 그것이 의미하는 바가 무엇인지 항상 혼란스럽습니다. </p>
P粉898107874P粉898107874398일 전401

모든 응답(2)나는 대답할 것이다

  • P粉555682718

    P粉5556827182023-08-25 00:55:35

    예, 올바르게 이해하셨습니다. 비밀번호 해시() 함수는 자체적으로 솔트를 생성하고 생성된 해시 값에 포함합니다. 솔트가 제 역할을 하는 것으로 알려져 있더라도 데이터베이스에 솔트를 저장하는 것은 절대적으로 옳습니다.

    으아아아

    당신이 언급한 두 번째 소금(파일에 저장된 것)은 실제로는 Pepper 또는 서버 측 키입니다. 해싱하기 전에 소금처럼 추가하면 후추를 추가하는 것입니다. 하지만 더 좋은 방법이 있습니다. 먼저 해시를 계산한 다음 서버측 키를 사용하여 해시를 암호화(양방향)하는 것입니다. 이를 통해 필요한 경우 키를 변경할 수 있습니다.

    솔트와는 달리 이 키는 비밀로 유지되어야 합니다. 사람들은 종종 그것을 섞어서 소금을 숨기려고 노력하지만, 소금이 제 역할을 하도록 두고 열쇠로 비밀을 추가하는 것이 더 좋습니다.

    회신하다
    0
  • P粉377412096

    P粉3774120962023-08-25 00:34:19

    비밀번호를 저장하려면 password_hash를 사용하는 것이 좋습니다. 데이터베이스와 파일로 분리하지 마세요.

    다음과 같은 입력이 있다고 가정합니다:

    으아아아

    먼저 다음을 수행하여 비밀번호를 해시합니다.

    으아아아

    그런 다음 출력을 봅니다.

    으아아아

    보시다시피 해시되어 있습니다. (나는 당신이 이 단계를 따랐다고 가정합니다).

    이제 이 해시된 비밀번호를 데이터베이스에 저장했으므로 비밀번호 열이 해시 값(최소 60자 이상)을 수용할 만큼 충분히 큰지 확인하세요. 사용자가 로그인을 요청하면 다음과 같이 데이터베이스의 해시를 사용하여 입력한 비밀번호를 확인할 수 있습니다.

    으아아아

    공식 참고자료

    회신하다
    0
  • 취소회신하다