Node.js_crypto와 util

Node.js 2021. 7. 1. 15:03

(본 포스팅은 길벗의 'Node.js 교과서' 책을 공부하면서 작성되었습니다_내돈내산) 

 

< 단방향 암호화(crypto) >

  • 암호화: 평문을 암호로 만듦
  • 복호화: 암호를 평문으로 해독
  • 해시기법: 문자열을 고정된 길이의 다른 문자열로 바꾸는 방식, 해시함수를 이용해 바뀌어진 문자열은 다시 반대로 돌아갈수가 없다. 해쉬화시킬때 특정 문자열은 언제나 같은 문자열로 변환된다.

1. Hash 사용하기

const crypto = require('crypto');

console.log('base64: ', crypto.createHash('sha512').update('비밀번호').digest('base64'));
console.log('hex: ', crypto.createHash('sha512').update('비밀번호').digest('hex'));
console.log('base64: ', crypto.createHash('sha512').update('다른 비밀번호').digest('base64'));
  • createHash(알고리즘): 사용할 해시알고리즘을 넣는다
    - md5, sha1, sha256, sha512 등이 가능하지만 나온지 오래된 알고리즘일수록 보안적으로 취약하다.
    - 현재는 sha512 알고리즘을 많이 사용한다.
  • update(문자열): 변환할 문자열을 넣어준다
  • digest(인코딩 ): 인코딩 할 알고리즘을 넣어준다.

2. pbkdf2 

  • 현재는 pbkdf2나, bcrypt, scrypt 알고리즘으로 비밀번호를 암호화
  • Node는 pbkdf2와 scrypt 지원

const crypto = require('crypto');

crypto.randomBytes(64, (err,buf) => {
  const salt = buf.toString('base64');
  crypto.pbkdf2('비밀번호', salt, 100000, 64, 'sha512', (err,key) => {
    console.log('password', key.toString('base64'));
  });
};
  • pbkdf2의 경우 salt와 함께 hash함수를 이용해 해시화를 진행하기때문에 salt가 바뀌면 암호화 결과값도 바뀌게 됨.

< util (편의기능) >

  • deprecated와 promisify가 자주 쓰임
  • deprecated: 첫번째 인자로 넣은 함수를 사용했을때 두번째 인자로 넣은 경고메시지가 출력됨. 함수가 조만간 사라지거나 변경될 때 알려줄 수 있음. 
  • util.promisify: 콜백패턴을 프로미스 패턴으로 바꿔줌. 이렇게 바꾸면 async/await 패턴까지 사용가능. 단, 콜백이 (error, data) 형식이어야 함.(노드에서는 대부분 (error, data) 형태로 되어있음)
const util = require('util');
const crypto = require('crypto');

const dontUseMe = util.deprecate((x, y) => {
  console.log(x + y);
}, 'dontUseMe 함수는 deprecated되었으니 더 이상 사용하지 마세요!');
dontUseMe(1, 2);

const randomBytesPromise = util.promisify(crypto.randomBytes);
randomBytesPromise(64)
  .then((buf) => {
    console.log(buf.toString('base64'));
  })
  .catch((error) => {
    console.error(error);
  });

 

 

'Node.js' 카테고리의 다른 글

Node.js_HTTP 모듈로 서버 만들기  (0) 2021.07.01
Node.js_버퍼(buffer)와 스트림(stream)  (0) 2021.07.01
Node.js_파일 시스템(fs)  (0) 2021.07.01
Node.js_워커스레드(worker thread)  (0) 2021.07.01
Node.js_모듈 만들기  (0) 2021.07.01
admin