- | 암호화 | 복호화 | 암호화방식 |
---|---|---|---|
단방향 | 가능 | 불가능 | Hash |
양방향 | 가능 | 가능 | 대칭키(비공개키) 비대칭키(공개키) |
키(Key)
: 매핑 전 원래 데이터 값해시 값(hash value)
: 매핑 후 데이터 값해싱(hashing)
: 매핑하는 과정Blowfish
암호를 기반으로 설계된 암호화 함수blowfish
: 브루스 슈나이어가 설계한 키(Key) 방식의 대칭형 블록 암호npm install bcrypt // 모듈 설치
const bcrypt = require('bcrypt') //모듈 불러오기
const salt = 10; // 상수로 설정, 보통 10 or 11 로 함
암호화
const bcryptPassword = (password)=>{
return bcrypt.hashSync(password, saltNumber)
}
// hashSync : 비동기
// hash : 동기
복호화
const comparePassword = (password, dbpassword)=>{
return bcrypt.compareSync(password, dbpassword)
}
// compareSync : 비동기
// compare : 동기
// password : 검증할 비밀번호
// dbpassword : 암호화된 비밀번호
const salt = crypto.randomBytes(16).toString('base64') //랜덤 값으로 솔트 생성
const iterations = 100; //반복횟수 설정
const keylen = 64; // 생성할 키의 길이
const digest = 'sha512' // 해시 알고리즘
const createpbkdf = (password) =>{
return crypto.pbkdf2Sync(password, salt, iterations, keylen, digest).toString('base64');
};
// 비밀번호, 솔트값, 반복횟수, 키의길이, 알고리즘 순서로 들어감
검증
const verifyPassword = (password, salt, dbpassword) =>{
const compare = crypto.pbkdf2Sync(password, salt, iterations, keylen, digest).toString('base64');
if(compare == dbPassword)
return true;
return false;
// 이번에 암호화한 값(comapre)이랑 원래 암호화 되어있는 값(dbpassword)이랑
// 비교해서 같으면 true반환, 틀리면 false를 반환