티스토리 뷰

Coding

비밀번호 암호화

Kim Da Beeen 2023. 5. 30. 15:55
반응형

 

비밀번호는 반드시 안보이게 암호화 해야됨!

 

 

 

암호화 종류

 

 

  암호화 복호화 암호화 방식
단방향 가능 불가능 해시
양방향 가능 가능 대칭키(비공개키)
비대칭키(공개키)

 

단방향 암호화를 일반적으로 사용한다 왜?

복호화할 수 없는 암호화 방법으로 암호문을 다시 원본 데이터로 복원하는 것은 매우 어렵거나 불가능하기 때문

단방향 암호하는 해시함수를 사용하는데 해시함수는 입력 데이터를 해시값으로 변환하여 원본 데이터를 숨기고 안전하게 저장하는 역할을 한다.

*복호화 - 암호화된 문자열을 다시 원래 문자열로 돌려 놓는 것 

*해시함수 - 입력데이터를 받아서 일정 길이의 해시값으로 변환하는 함수, 입력데이터의 작은 변화도 결과 값에 큰 차이를만들어 내는 것이 특징이며 동일한 입력에 대해서는 항상 동일한 해시값이 생성

 

 

 

 

 

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')를 인수로 받음

 

 

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/02   »
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
글 보관함