-
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
에서 더 많은 암호화 방식을 알 수 있다.
'웹프로그래밍 > 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 댓글