암호화는 가능하지만 복호화는 불가능

알고리즘에 사용할 해시 알고리즘을 넣어줍니다.
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'));

컴퓨터의 발달로 기존 암호화 알고리즘이 위협받고 있음

const crypto = require('crypto');
crypto.randomBytes(64, (err, buf) => {
const salt = buf.toString('base64');
console.log('salt:', salt);
crypto.pbkdf2('비밀번호', salt, 100000, 64, 'sha512', (err, key) => {
console.log('password:', key.toString('base64'));
});
});

const crypto = require('crypto');
const algorithm = 'aes-256-cbc';
const key = 'abcdefghijklmnopqrstuvwxyz123456';
const iv = '1234567890123456';
const cipher = crypto.createCipheriv(algorithm, key, iv);
let result = cipher.update('암호화할 문장', 'utf8', 'base64');
result += cipher.final('base64');
console.log('암호화:', result);
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let result2 = decipher.update(result, 'base64', 'utf8');
result2 += decipher.final('utf8');
console.log('복호화:', result2);

기존 node에 내장 된 암호화들은 복잡하기도 하고 암호학 기반 지식이 없으면 사용하기가 어려우니, crypto-js 라이브러리를 많이 사용 함 (남이 만들어 둔 암호화)
https://www.npmjs.com/package/crypto-js
key 관리가 애매하기 때문에 AWS KMS (Key management System) 등을 이용하기도 함
각종 편의 기능을 모아둔 모듈
util.deprecated(경고 메시지가 출력될 함수, 경고 메시지 내용)
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);
});
