Node.js - 노드 내장 모듈(crypto,util)

ryan·2022년 5월 4일
0
post-custom-banner

crypto

단방향 암호화

  • 암호화는 cpu 자원을 많이 사용하기 때문에 멀티 스레드로 작동되는게 일반적이다.
  • 싱글 스레드인 node.js도 암호화가 가능하지만 복호화는 구현하기 어렵다.
    • 암호화 : 평문을 암호로 만듬
    • 복호화 : 암호를 평문으로 해독
  • nodejs에서 채용하는 단방향 암호화의 대표적인 기법은 해시 기법이다.
    • 해시 : 문자열을 고정된 길이의 다른 문자열로 바꾸는 방식

      ryan > 암호화 > 'abc'라는 해시를 만들었을 때 웹 상에는 ryan이라는 정보는 존재하지 않고 abc라는 정보만으로 비교 확인하기 때문에 안전하다.

암호화 에제
const crypto = require('crypto');
console.log(crypto.createHash('sha512').update('password(비밀번호').digest('base64'));
  • createHash(알고리즘) : 사용할 해시 알고리즘
  • update(문자열) : 변환할 문자열을 작성
  • digest(인코딩) : 인코딩할 알고리즘을 넣어줌
    • base64,hex,latin1이 주로 사용됨. base64가 결과 문자열이 가장 짧아 애용됨.

양방향 암호화

  • 대칭형 암호화

  • 암호화를 통해 생성된 key를 통해 암호화-복호화 작업을 진행한다.

  • 백엔드와 달리 프론트단에서는 누구나 개발자 도구를 통해 내부 정보를 확인할 수 있음.

    서버에서 보내준 암호화해준 무언가를 프론트에서 해독하려면 key를 노출시켜야 됨. 프론트와 서버관계에서는 같은 키를 사용하는 알고리즘은 지양해야됨

  • crypto.createCipheriv를 통해 사용할 수 있지만, 조금 더 간편한 방법으로 crypto.js API를 사용 권장

Util

: 각종 편의 기능을 모아둔 모듈

deprecated

const dontUse = util.deprecated((x, y) => {
  return x + y;
}, 'dontuse는 deprecated되었으니 사용하지 마세요');
  • 노드로 만든 프로그램에서 코드의 수정사항이 발생했을 때 함부로 수정하지 못한다.(이미 잘못된 코드로 많은 코드가 빌드되었기 때문에)
  • deprecated는 더 이상 사용되지 않고, 잘못된 코드를 사용할 때 노티스를 보내준다.

promisify

const funcA = util.promisify(crypto.funcA); // 콜백함수를 감싸줌
funcA(1)
  .then((x) => {
    console.log(x);
  })
  .catch((err) => {
    console.error(err);
  });
  • 노드 환경에서 콜백 함수를 감싸주면 then, catch 문법을 사용할 수 있게 됨.
  • 단, 콜백 함수의 매개변수가 (err, data) => {}형태로 되어 있어야 함.
profile
프론트엔드 개발자
post-custom-banner

0개의 댓글