2
node.js bcrypt를 사용하여 암호를 데이터베이스에 저장하기 전에 해시하는 것이 좋습니다.bcrypt에서 암호가 올바른지 여부를 비교하기 위해 소금이 필요하지 않은 이유는 무엇입니까?
이 링크는 설명서를 제공합니다. https://github.com/kelektiv/node.bcrypt.js
다음은 비밀번호를 해싱하는 예입니다.
var bcrypt = require('bcrypt');
const saltRounds = 10;
const myPlaintextPassword = 's0/\/\P4$$w0rD';
var salt = bcrypt.genSaltSync(saltRounds);
var hash = bcrypt.hashSync(myPlaintextPassword, salt);
// Store hash in your password DB.
다음은 암호를 확인하는 코드입니다.
// Load hash from your password DB.
bcrypt.compareSync(myPlaintextPassword, hash); // true
이것은 이해할 수없는 내용입니다. bcrypt.compareSync
에서 매개 변수가없는 이유는 무엇입니까 salt
? 해시가 소금에서 생성 되었기 때문에 해싱에 사용 된 원래 소금이 아닌 일반 텍스트 비밀번호를 비교하는 것이 어떨까요?
감사에서 답변을 참조 데이터베이스에 저장 bcrypt 문자열의 일부입니다. salt가 생성 된 해시의 일부라면 bcrypt를 덜 안전하게 만듭니다. – user781486
아니요, 그렇지 않습니다. 소금은 항상 해시와 함께 저장하거나 보안에 별다른 차이가 없습니다. 소금의 목적은 레인보우 테이블 공격을 방지하는 것이며 공격자가 소금을 가지고 있다면 문제가되지 않습니다. – Tom