ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • path모듈 && url모듈 && crypto모듈
    웹프로그래밍/node.js 2019. 8. 7. 19:13

    path 모듈

    path.sep

    windows(\\)

    path.delimiter   //환경변수 구분자

    windows(;) 

    const path = require('path');
    console.log(path.dirname(__filename));   //경로
    //C:\Users\hjoo_\Documents\nodejs-start\lecture
    
    console.log(path.extname(__filename));   //확장자
    //.js
    
    console.log(path.basename(__filename));  //파일명
    //path.js
    
    console.log(path.parse(__filename));    //분해를 해준다
    // { root: 'C:\\',
    //   dir: 'C:\\Users\\hjoo_\\Documents\\nodejs-start\\lecture',
    //   base: 'path.js',
    //   ext: '.js',
    //   name: 'path' }
    
    console.log(path.format({           //다시 합쳐준다
        root: 'C:\\',
        dir: 'C:\\Users\\hjoo_\\Documents\\nodejs-start\\lecture',
        base: 'path.js',
        ext: '.js',
        name: 'path'
    }));
    
    //알아서 경로를 제대로 만들어줌
    console.log(path.normalize('C:\\Users\\\hjoo_//Documents\//nodejs-start\\\lecture\\\path.js'));
    //C:\Users\hjoo_\Documents\nodejs-start\lecture\path.js
    
    //절대경로인지 상대경로인지 알려줌
    console.log(path.isAbsolute('../'));
    //false
    
    //첫번째에서 두번째로 가는 상대경로를 보여줌
    console.log(path.relative('C:\\Users\\hjoo_\\Documents\\nodejs-start\\lecture','C:\\'));
    //..\..\..\..\..
    
    //path.join 절대 경로 무시하고 합침
    console.log(__dirname);
    //C:\Users\hjoo_\Documents\nodejs-start\lecture
    console.log(path.join(__dirname, '..','..','/users','.','/zerocho'));
    //C:\Users\hjoo_\Documents\users\zerocho
    
    //path.resolve 절대경로 고려하고 합침 루트는 C:\
    console.log(path.resolve(__dirname, '..','..','/users','.','/zerocho'));
    //C:\zerocho

     

    url 모듈

    const url = require('url');
    
    const URL = url.URL;
    const myURL = new URL('https://www.inflearn.com/course/node-js-%EA%B5%90%EA%B3%BC%EC%84%9C/lecture/14388');
    console.log('new URL():', myURL);
    console.log('url.format():', url.format(myURL));
    console.log('--------------------------');
    const parseUrl = url.parse('https://www.inflearn.com/course/node-js-%EA%B5%90%EA%B3%BC%EC%84%9C/lecture/14388');
    console.log('url.parse():', parseUrl);
    //기존 방식 (url.parse)은 호스트가 없을 때도 쓸 수 있습니다.
    //WHATWG방식(url.URL)은 search처리가 편리합니다.
    
    //노드 searchParams의 메서드는 FormData나 URLSearchParams객체에도 비슷하게 쓰인다.
    //append는 값 추가 (기존 값 보존)
    //set은 기존 값 초기화 후 수정

     

    crypto 모듈 ( 단방향 암호화 ) (해시)

    비밀번호는 hash방식으로 암호화 해 복호화되지 않는 문자열을 만든다.

    비밀번호는 다시 복호화할 필요가 없다.

    암호문을 저장한 후 사용자의 입력 비밀번호를 암호화한 것과 비교하여 로그인 할 수 있도록한다.

    const crypto = require('crypto');
    
    console.log(crypto.createHash('sha512').update('비밀번호').digest('base64'));
    //sha512라는 알고리즘으로 '비밀번호'를 암호화하고, base64로 보여준다.

     

    sha512를 활용한 pbkdf2암호화 방식

    -> 해시 충돌 공격을 어렵게 하기 위해 salt(소금)이라는 문자열을 원래 비밀번호에 추가하고 iteration 횟수를 높힌다.

    const crypto = require('crypto');
    
    //sha512를 활용한 pbkdf2암호화 방식
    crypto.randomBytes(64, (err, buf) => {
        const salt = buf.toString('base64');
        console.log('salt', salt);
        console.time('암호화');
        crypto.pbkdf2('현주바보', salt, 651395, 64, 'sha512', (err, key) => {
            console.log('password', key.toString('base64'));
            console.timeEnd('암호화');
        });
    });

    -> salt는 암호화된 비밀번호와 같이 저장하고, iteration은 1초 정도가 걸릴때까지 올려주면 좋다.

    -> console.time을 찍어서 1초정도가 될때까지 iteration(651395부분)을 올려주었다.

    실무에서는 bcrypt, scrypt 등을 쓴다.

     

    crypto 양방향 암호화

     

    const crypto = require('crypto');
    
    const cipher = crypto.createCipher('aes-256-cbc', '열쇠');
    let result = cipher.update('현주바보', 'utf8', 'base64');
    result += cipher.final('base64');
    console.log('암호', result);
    //createCipher
    //utf8평문을 base64 암호문으로
    
    //createDecipher
    //base64암호문을 utf8평문으로
    const decipher = crypto.createDecipher('aes-256-cbc', '열쇠');
    let result2 = decipher.update(result, 'base64', 'utf8');    //암호화와 반대
    result2 += decipher.final('utf8');
    console.log('평문', result2);

    https://nodejs.org/api/crypto.html

    에서 더 많은 암호화 방식을 알 수 있다.

     

    Crypto | Node.js v12.8.0 Documentation

    Crypto# The crypto module provides cryptographic functionality that includes a set of wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify functions. Use require('crypto') to access this module. const crypto = require('crypto'); const secr

    nodejs.org

     

     

    '웹프로그래밍 > node.js' 카테고리의 다른 글

    events모듈  (0) 2019.08.08
    util 모듈 && fs 모듈  (0) 2019.08.07
    데이터베이스  (0) 2019.06.04
    사용자 수정 API 성공, 실패시  (0) 2019.06.03
    사용자 추가 API 성공, 실패시  (0) 2019.06.03

    댓글

Designed by Tistory.