분류
javascript
JavaScript bcrypt 라이브러리를 사용하는 방법
본문
bcrypt 라이브러리를 사용하여 JavaScript에서 비밀번호를 해시하고 확인하는 방법 알아보기
bcrypt npm 패키지는 JavaScript에서 비밀번호로 작업하는 데 가장 많이 사용되는 패키지 중 하나입니다.
이것은 보안 101이지만 새로운 개발자에게는 언급 할 가치가 있습니다. 데이터베이스 나 다른 곳에 암호를 일반 텍스트로 저장하지 마십시오.
대신 암호에서 해시를 생성하고 저장합니다.
import bcrypt from 'bcrypt'
// or
// const bcrypt = require('bcrypt')
const password = 'oe3im3io2r3o2'
const rounds = 10
bcrypt.hash(password, rounds, (err, hash) => {
if (err) {
console.error(err)
return
}
console.log(hash)
})
두 번째 인수로 숫자를 전달하면 클수록 해시가 더 안전합니다. 또한 생성하는 데 시간이 오래 걸립니다.
README 라이브러리는 2GHz 코어에서 다음을 생성 할 수 있다고 알려줍니다.
rounds=8 : ~40 hashes/sec
rounds=9 : ~20 hashes/sec
rounds=10: ~10 hashes/sec
rounds=11: ~5 hashes/sec
rounds=12: 2-3 hashes/sec
rounds=13: ~1 sec/hash
rounds=14: ~1.5 sec/hash
rounds=15: ~3 sec/hash
rounds=25: ~1 hour/hash
rounds=31: 2-3 days/hash
bcrypt.hash()를 여러 번 실행하면 결과가 계속 변경됩니다. 해시에서 원래 비밀번호를 재구성 할 수 있는 방법이 없기 때문에 이것이 핵심입니다.
동일한 비밀번호와 해시가 주어지면 bcrypt.compare() 함수를 사용하여 해시가 해당 비밀번호로 빌드 되었는지 확인할 수 있습니다.
bcrypt.compare(password, hash, (err, res) => {
if (err) {
console.error(err)
return
}
console.log(res) //true or false
})
그렇다면 암호가 해시와 일치하므로 예를 들어 사용자가 성공적으로 로그인 할 수 있습니다.
콜백 대신 약속 기반 API와 함께 bcrypt 라이브러리를 사용할 수도 있습니다.
const hashPassword = async () => {
const hash = await bcrypt.hash(password, rounds)
console.log(hash)
console.log(await bcrypt.compare(password, hash))
}
hashPassword()
이 글리치에서 몇 가지 예를 확인하십시오.
- 이전글리치 라우터 자습서 19.08.16
- 다음글CSS를 사용하여 텍스트 선택을 비활성화 하는 방법 19.08.16