Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ubuntu
- python
- Kotlin
- S3
- Express
- Util
- Network
- mongoose
- React
- OOAD
- docker
- AWS
- macos
- HTML
- linux
- MongoDB
- Crawling
- wireshark
- css
- DATABASE
- Android
- sequelize
- TypeScript
- algorithm
- OS
- node.js
- mysql
- typeorm
- postman
- Scheduling
Archives
- Today
- Total
Seongwon Lim
[node.js] Bcrypt를 이용한 패스워드 암호화 본문
반응형
암호화를 해야하는 이유?
- 데이터베이스에 비밀번호 정보가 그대로 들어가게 되면 심각한 보안 문제가 발생할 수 있다.
- 다른 사용자는 물론이고 관리자 또한 사용자들의 비밀번호 정보를 알 수 없게 해야 한다.
What is Bcrypt?
위키에 따르면 bcypt는 블로피시 암호에 기반을 둔 암호화 해시 함수이다. 솔트를 통합한 bcrypt는 적응형 함수의 하나이며 시간이 지남에 따라 속도 저하를 위해 반복 횟수가 증가가 수반될 수 있으므로 연산 파워의 증가에도 브루트 포스 검색 공격에 대한 저항을 유지할 수 있도록 설계된 암호화 기술이다.
기존에 사용하던 SHA512, SHA256 해싱 함수와는 다르게 Salt 라는 개념을 도입하여 해싱을 하기 때문에 더 강력한 암호화를 할 수 있다고 평가받고 있다.
What is Salt in bcrypt?
salt는 직역하면 소금을 뿌리는 것이다. 다시 말하면 원래 문자열에 소금을 뿌려서(=salt를 붙여서) 새로운 문자열을 만든다는 의미이다. 사용자는 생성할 salt 개수를 직접 정할 수 있으며 기본적으로 10개를 사용한다고 한다.
How to install bcrypt
- npm install bcrypt —-save
Bcrypt Example
예를 들어 qwer1234e 라는 문자열을 패스워드로 하는 값을 암호화 하기 위해서는 아래와 같이 입력하면 된다.
const bcrypt = require('bcrypt'); // import module
const saltRoundsh = 10; // 몇개의 salt를 생성할 지 정의
// 비밀번호 암호화 기능
bcrypt.genSalt(saltRounds, (err, salt)=>{
if(err) return next(err); // error occur
// 에러가 발생하지 않으면 hash 생성
bcrypt.hash("qwer1234e", salt, (err, hash) => {
if(err) return next(err); // hash 생성 오류
console.log(hash);
})
})
// 결과 : $2b$10$yciLkIZZMK6FaFOqE.1WR.STQRuRMUGMpsH5//FrcrSx4DP7.vGA6
암호화 문자열과 원래 문자열 비교 방법
bcrypt에서 제공하는 compare 또는 compareSync 메서드를 통해서 암호화된 문자열과 사용자가 입력한 패스워드 문자열을 비교할 수 있다.
const pw = 'qwer1234e';
const encodedPW = '$2b$10$yciLkIZZMK6FaFOqE.1WR.STQRuRMUGMpsH5//FrcrSx4DP7.vGA6';
bcrypt.compare(pw, encodedPW, (err, same) => {
// async callback you want..
})
Salt 개수를 늘리면 강력한 암호화 패턴을 생성할 수 있지만 성능적인 측면에서 단점이 생기기 때문에 개수를 적절하게 정하는 것도 중요하다.
출처
'Node.js' 카테고리의 다른 글
[node.js] Sequelize 사용 방법 및 Mysql 연동하기 (0) | 2022.05.10 |
---|---|
[node.js] Mysql 다중쿼리 처리하기 (0) | 2022.05.10 |
[node.js] Nodemon 설치 및 사용 (0) | 2022.05.10 |
[node.js] Mysql 연동하기 (0) | 2022.05.10 |
[node.js] multer를 이용한 파일 업로드 구현하기 (0) | 2022.05.10 |
Comments