티스토리 뷰
비밀번호는 반드시 안보이게 암호화 해야됨!
암호화 종류
암호화 | 복호화 | 암호화 방식 | |
단방향 | 가능 | 불가능 | 해시 |
양방향 | 가능 | 가능 | 대칭키(비공개키) 비대칭키(공개키) |
단방향 암호화를 일반적으로 사용한다 왜?
복호화할 수 없는 암호화 방법으로 암호문을 다시 원본 데이터로 복원하는 것은 매우 어렵거나 불가능하기 때문
단방향 암호하는 해시함수를 사용하는데 해시함수는 입력 데이터를 해시값으로 변환하여 원본 데이터를 숨기고 안전하게 저장하는 역할을 한다.
*복호화 - 암호화된 문자열을 다시 원래 문자열로 돌려 놓는 것
*해시함수 - 입력데이터를 받아서 일정 길이의 해시값으로 변환하는 함수, 입력데이터의 작은 변화도 결과 값에 큰 차이를만들어 내는 것이 특징이며 동일한 입력에 대해서는 항상 동일한 해시값이 생성
Crypto
암호화 알고리즘 패키지
npm i crypto
const crypto = require('crypto');
const crypto = require("crypto");
console.log(crypto.createHash("sha512").update("123").digest("base64"));
//PJkJr+wlNU1VHa4hWQuybjjVPyFzuNPcPu5MBH56scHri4UQPjvnumE7MbtcnDYhTcnxSkL9ei/bhIVrylxEwg==
Bcrypt
단방향 암호화 알고리즘 중 하나로
해시함수와 솔트(salt)를 사용하여 비밀번호와 같은 데이터를 안전하게 저장하고 검증하기위해 설계된 암호화 함수
Bcrypt는 원본 비밀번호를 해시함수를 통해 안전하게 암호화하고 강력한 솔트를 사용하여 해시값을 보호
*솔트 - 무작위로 생성된 추가적인 데이터로 해시함수의 출력을 변형시켜 동일한 비밀번호에 대해 항상 동일한 해시값이 생성되지 않게 함
솔트 생성하기
const salt = crypto.randomBytes(64).toString("base64");
//Bvho7uW/0oIGjypsmNzyegzuYmWWagsrt3FyBq0Bz/jAOfhz8xvEonlI6CzxoYlzUHO+yaDNI1At0uPmpT26+Q==
crypto의 randomBytes 메서드를 사용하여 지정된 길이의 임의의 바이트를 생성하고
생성된 바이트를 Base64로 인코딩하여 문자열로 반환하였다→ salt 값을 생성하는 것
패스워드를 암호화하여 해시된 형태로 반환
const createHashedPassword = (pw) => {
const salt = crypto.randomBytes(64).toString("base64");
return crypto.pbkdf2Sync(pw, salt, 10, 64, "sha512").toString("base64");
};
console.log(createHashedPassword("123"));
//TMiyV3PYEClWehIo4z4D/9fI1VEdK/fOUc08/vxQdTbVm67I5dUgYQqGNKYnewLGc5m4x6i1gSQ2L3NLlHWfcQ==
return crypto.pbkdf2Sync(pw, salt, 10, 64, "sha512").toString("base64");
→ pbkdf2Sync 메서드는 pw와 salt, 반복횟수(10), 출력길이(64), 알고리즘('sha513')를 인수로 받음
'Coding' 카테고리의 다른 글
[python] 기초 문법(if문, 반복문, 함수) (0) | 2023.10.10 |
---|---|
프론트엔드 개발자라면 꼭 알아야한다는 CSR, SSR (0) | 2023.07.14 |
[포스코x코딩온] 웹 풀스택 과정 5주차 시퀄라이즈(Sequlize) (0) | 2023.05.29 |
원티드 프리온보딩 커리어 킥오프 SPRING (0) | 2023.03.20 |
그동안 받았던 면접 질문 (0) | 2023.02.20 |