해결된 질문
작성
·
744
1
안녕하세요! 좋은 강의 잘 듣고 있습니다.
다름이 아니라 강의에서 사용하신 bcrypt 라이브러리를 더 공부하고 싶어 문서를 보다가 궁금한 점이 있어 두 가지 질문드립니다.
먼저 bcrypt.hash() 함수의 두 번째 매개변수로는 salt가 들어가야하지 않나요? 강의에서는 10을 round의 의미로 사용하시던데 이를 위해선 bcrypt.genSalt(10)과 같이 salt 생성 메서드를 사용해야 하는 것으로 보입니다.
그리고 동일하게 10이라는 값을 salt로 사용했는데 hash값이 달라진건 bcrypt 라이브러리 내부적으로 다른 로직이 있기 때문일까요?
답변 1
2
공식문서에 보시면 hash의 두번째 인자로 number 혹은 string을 받을 수 있도록 되어 있어요. number를 입력하면 bcrypt.getSalt 이 부분을 자동으로 해주게 됩니다. 그래서 직접 salt를 생성해줄 필요가 없어요.
보안상 hash를 할 때마다 새로운(랜덤한) salt가 생성됩니다. 매번 새로운 salt가 생성되면 비밀번호 해시를 어떻게 대조하느냐라고 생각할 수 있는데요. 해시 값에 salt가 포함되어 있습니다. 그래서 compare함수로 대조할 때 salt를 따로 입력하지 않는거에요. 해시처리 되기전 비밀번호와 디비에 저장되어 있던 해시비밀번호만 받도록 되어 있죠. compare하수가 내부적으로 해시비밀번호에서 salt를 추출하고 해당 salt로 비밀번호를 해시해서 해시비밀번호와 대조하게 됩니다.