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 |