//암호화 하고 검증하기
const bcrypt = require("bcrypt"); //bcrypt모듈을 불러와라
const password = "password"; //사용자실제비밀번호받는값
const saltRounds = 12; //cost factor로 8-12 값이 적당함
const makeHash = async (password, saltRounds) => {
return await bcrypt.hash(password, saltRounds);
};
//bcrypt 모듈로 암호화를 사용할 때는 hash method를 사용
//hash메서드는 두개의 인자를 받는다.
//문자열값과 Cost Factor값(password 값과 saltRounds라는 cost factor값)
//main함수를 통해 암호화를 진행해보자
const main = async () => {
const hashedPassword = await makeHash(password, saltRounds); //password,saltRounds를 사용해 암호화를 진행하고 결과를 hasedPassword에 할당하고 값을 확인해보면
console.log(hashedPassword);
};
main(); //====> main함수 호출을 통해 암호를 확인했다.
//hashedPassword 를 compare 하고 싶잖아
const checkHash = async (password, hashedPassword) => {
return await bcrypt.compare(password, hashedPassword);
};
const mainCheck = async () => {
const hashedPassword = await makeHash("password", 12);
const result = await checkHash("passwooord", hashedPassword);
console.log(result);
};
mainCheck(); //====>평문과암호화된값이같을때 true, 아닐때 false 출력
//password라는 문자열을 암호화 하였다.
//비교 대상도 password 라는 문자열.
bcrypt.hash(input1, input2)
input1 = password 값(문자열)이 들어가고
input2 = cost factor
const bcrypt = require("bcrypt");
const password = "password"
const saltRounds = 12;
const makeHash = async(password, saltRounds) => {
return await bcrypt.hash(password, saltRounds);
};
const main = async() => {
const hashedPassword = await makeHash(password, saltRounds);
console.log(hasedRounds);
};
main();
const checkHash = async(password, hasedPassword) => {
return await bcrypt.compare(password, hashedPassword);
};
const mainCheck = async() => {
const hashedPassword = await makeHash("password", 12);
const result = await checkHash("password", hashedPassword);
console.log(result);
};
mainCheck();
const jwt = require("jsonwebtoken");
const payLoad = { foo: "bar" };
//토큰을 통해 실제로 전달할 내용을 변수 payLoad에 할당하도록한다
//객체의 형태로 할당한다. 실제 서비스에서는 노출되어도 되지만 사용자 정보를 알 수 있는것으로 할당.
const secretKey = "mySecretKey";
//secretKey 변수에 JWT의 signature를 만들때 사용할 secretkey를 할당
//secretkey는 유추할 수 없도록 규칙없는,적당히 긴 문자열로만들어야하고
//코드에 노출하면 절대 안됨
const jwtToken = jwt.sign(payLoad, secretKey);
//sign메서드는 필수로 2개의 인자를 받는데
//1st 는 payLoad를 2nd로는 secretkey
//3rd 인자에는 토큰을 만들 때 사용할 알고리즘을 넣을 수도 안넣을수도
//안넣으면 HS256방식으로 토큰을 생성
console.log(jwtToken); // =>>> JWT가 생성되었다!
const decoded = jwt.verify(jwtToken, secretKey);
//2nd인자인 secretKey 가
//JWT를 만들 때 사용된 secretKey와 같다면
//decoded 변수에 JWT의 payload가 할당된다.
console.log(decoded);
payLoad : JWT의 2번째 구성 요소로 실질적으로 전달해야할 정보들이 들어가있다.
Secret Key :
const jwt = require("jsonwebtoken");
const payLoad = { foo: "bar" };
const secretKey = "mySecretKey";
const jwtToken = jwt.sign(payLoad, secretKey);
console.log(jwtToken);
//===> Token 생성 완료
const decoded = jwt.verify(jwtToken, secretKey);
console.log(decoded);
//===> Token 검증 완료