비밀번호 해싱 및 확인을 위해 PHP의 비밀번호 해시 함수를 사용하는 방법
P粉538462187
2023-08-21 18:37:28
<p>최근에 저는 인터넷에서 찾은 로그인 스크립트에 나만의 보안을 구현하려고 노력해 왔습니다. 각 사용자에 대한 솔트를 생성하는 방법을 배우던 중 <code>password_hash</code>를 우연히 발견했습니다. </p>
<p>내가 이해한 바에 따르면(이 페이지를 읽은 결과) <code>password_hash</code>를 사용할 때 솔트가 해당 행에 이미 생성되었습니다. 이거 진짜야? </p>
<p>또 다른 질문이 있습니다. 두 가지 소금을 사용하는 것이 현명한가요? 하나는 파일에 직접 있고 다른 하나는 데이터베이스에 있습니까? 이렇게 하면 누군가가 데이터베이스의 솔트를 해독하더라도 파일에 해당 솔트가 계속 남아 있게 됩니다. 나는 여기서 소금을 저장하는 것이 결코 현명한 생각이 아니라는 것을 읽었지만 사람들이 이것이 무엇을 의미하는지 항상 혼란스러워했습니다. </p>
예, 올바르게 이해하셨습니다. Password_hash() 함수는 자동으로 솔트를 생성하여 생성된 해시 값에 포함시킵니다. 데이터베이스에 소금을 저장하는 것은 완벽하게 정확하며 알려진 경우에도 작동합니다.
으아악당신이 언급한 두 번째 솔트(파일에 저장된 솔트)는 실제로 "pepper" 또는 서버 측 키입니다. 해시(소금처럼) 앞에 추가하면 일종의 후추를 추가하는 것입니다. 그러나 더 좋은 방법이 있습니다. 먼저 해시를 계산한 다음 서버측 키를 사용하여 해시를 암호화(양방향 암호화)하는 것입니다. 이렇게 하면 필요한 경우 키를 변경할 수 있습니다.
솔트와 달리 이 키는 비밀로 유지되어야 합니다. 사람들은 종종 혼란스러워하고 소금을 숨기려고 노력하지만, 소금이 그 일을 하게 하고 열쇠를 사용하여 비밀을 추가하는 것이 더 좋습니다.
password_hash
을 사용하여 비밀번호를 저장하는 것이 좋습니다. 데이터베이스와 파일에 별도로 저장하지 마십시오.다음과 같은 입력이 있다고 가정합니다:
으아악먼저 다음 방법으로 비밀번호를 해시합니다.
으아악그런 다음 출력을 봅니다.
으아악해시된 것을 볼 수 있습니다(이 단계를 완료했다고 가정합니다).
이제 이 해시된 비밀번호를 데이터베이스에 저장하세요. 비밀번호 열이 해시 값(최소 60자 이상)을 수용할 만큼 충분히 큰지 확인하세요 . 사용자가 로그인을 요청하면 다음을 통해 데이터베이스의 해시가 입력된 비밀번호와 일치하는지 확인할 수 있습니다.
으아악공식 참고자료