정보실

웹학교

정보실

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()


글리치에서 몇 가지 예를 확인하십시오.




페이지 정보

조회 40회 ]  작성일19-08-16 10:08

웹학교