2017-01-10 1 views
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? 해시가 소금에서 생성 되었기 때문에 해싱에 사용 된 원래 소금이 아닌 일반 텍스트 비밀번호를 비교하는 것이 어떨까요?

답변

3

소금은, 예를 들어 Do I need to store the salt with bcrypt?

+0

감사에서 답변을 참조 데이터베이스에 저장 bcrypt 문자열의 일부입니다. salt가 생성 된 해시의 일부라면 bcrypt를 덜 안전하게 만듭니다. – user781486

+2

아니요, 그렇지 않습니다. 소금은 항상 해시와 함께 저장하거나 보안에 별다른 차이가 없습니다. 소금의 목적은 레인보우 테이블 공격을 방지하는 것이며 공격자가 소금을 가지고 있다면 문제가되지 않습니다. – Tom

관련 문제