단방향 암호화

암호화된 문자열을 복호화할 수 없는 것을 말합니다.

복호화란 ?

const crypto = require('crypto');

crpyto.createHash('sha512').update('password').digest('base64'));

base64 encoding

  1. 3개의 문자를 ASCII code를 통해서 8bit * 3 = 24bit으로 변환한다. 문자 하나 → binary data(2진수 형태) 문자가 3개가 되지 않으면 나머지는 0으로 채워 24bit로 만든다.
  2. 24bit를 6bit로 다시 나누어 문자로 변환한다. 총 4개의 문자로 변환, 0만 있는 문자는 padding(=)으로 변환한다.

password → efgdacedae== (총 8개의 문자를 12개의 문자로 변환)

pbkdf2 algorithm

bcrypt나 scrypt보다 취약

const crypto = require('crypto');

crypto.randomBytes(64, (err, buf) => {
  const add_str = buf.toString('base64'); 
  console.log('salt:', add_str);
// password에 add_str을 붙여 10만 번 sha512 변환과정
  crypto.pbkdf2('password', add_str, 100000, 64,'sha512', (err, key) => {
    console.log('password:', key.toString('base64'));
  });
});

양방향 암호화

암호화된 문자열을 키(key)를 사용하여 복호화할 수 있습니다.