Bcrypt 적용 / JWT 발급

yunny·2023년 1월 23일
0

westudy

목록 보기
9/15

Bcrypt 비밀번호 암호화

const bcrypt = require("bcrypt"); // (1)

const password = 'password'; // (2) 

const saltRounds = 12; // (3)

const makeHash = async (password, saltRounds) => {
    return await bcrypt.hash(password, saltRounds); // (4)
}

const main = async () => { 
    const hashedPassword = await makeHash(password, saltRounds); 
    console.log(hashedPassword);
}

main()
=> b'$2b$12$76taFAFPE9ydE0ZsuWkIZexWVjLBbTTHWc509/OLI5nM9d5r3fkRG'

(1) bcyrpt module import

(2) 암호화 할 평문

(3) Cost Factor

(4) hash() method로 암호화

첫번째 인자 - 암호화하고 싶은 평문
두번째 인자 - Cost Factor

Bcrypt 검증

const checkHash = async (password, hashedPassword) => {
    return await bcrypt.compare(password, hashedPassword) // (1)
}

const main = async () => {
    const hashedPassword = await makeHash("password", 12);
    const result = await checkHash("password", hashedPassword);
    console.log(result);
};

main()
=> true(or false) // (2)

(1) compare() method로 평문과 암호화 된 값 비교

첫번째 인자 - 평문
두번쨰 인자 - 암호화 된 값

(2) 평문과 암호화 된 값 비교해서 같으면 true, 다르면 false을 return


JWT 발급(HS256)

const jwt = require('jsonwebtoken'); // (1)

const payLoad = { foo: 'bar' }; // (2)
const secretKey = 'mySecretKey'; // (3)
const jwtToken = jwt.sign(payLoad, secretKey); // (4)

console.log(jwtToken)
=> 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE2NTA1NTYxMzZ9.YAMgUMLhiVUwkRTr2rpOrIyWN0cTGLxsxZBqLAaKWUU'

(1) jsonwebtoken 라이브러리 import

(2) 실제로 전달할 내용인 payload 정의

(3) SecretKey, 실제로는 환경변수로 관리해야함

(4) sign() method로 JWT 발급

첫번째 인자 - payload
두번째 인자 - secretKey
세번째 인자 - 선택 가능, 존재하지 않으면 HS256 알고리즘으로 JWT 발급

JWT 확인

const decoded = jwt.verify(jwtToken, secretKey); // (1)

console.log(decoded)
=> { foo: 'bar', iat: 1650555667 } // (2)

(1) verify() method로 JWT의 payload 확인

첫번째 인자 - JWT
두번째 인자 - secretKey

(2) JWT가 갖고 있던 payload

profile
기록하지 않으면 잊어버려요 !

0개의 댓글

관련 채용 정보