Node.js 단방향 암호화

이건선·2023년 3월 8일
0

Node.js

목록 보기
22/32

단방향 암호화 함수는 주어진 데이터를 암호화하여 다른 사람이 역으로 이를 해독하지 못하게 하는 함수입니다. 대표적인 단방향 암호화 함수로는 SHA-256, SHA-512, bcrypt 등이 있습니다. 단방향 암호화 함수는 일반적으로 해시 함수를 사용하여 구현됩니다.

crypto.randomBytes(n) 함수는 Node.js에서 제공하는 모듈 중 하나인 crypto 모듈에 포함되어 있습니다. 이 함수는 n 바이트의 암호화 된 난수를 생성합니다. 이 난수는 보안적으로 안전하며, 암호화 된 데이터를 생성하거나, 비밀키 또는 암호화 키를 생성하는 데 사용될 수 있습니다.

crypto.pbkdf2 함수는 Node.js에서 제공하는 모듈 중 하나인 crypto 모듈에 포함되어 있습니다. 이 함수는 패스워드와 솔트를 기반으로 하는 비밀번호 해싱 알고리즘인 PBKDF2를 구현합니다. 이 함수는 비밀번호 보안을 강화하기 위해 사용됩니다. PBKDF2는 단방향 해시 함수를 사용하여 비밀번호를 암호화하고, 솔트를 추가하여 공격자가 무작위로 값을 추측해야 하므로 보안성이 높아집니다.

crypto.pbkdf2Sync 함수는 Node.js에서 제공하는 모듈 중 하나인 crypto 모듈에 포함되어 있습니다. 이 함수는 pbkdf2 함수와 유사하지만, 콜백 함수 대신 동기적으로 작동합니다. 이를 통해 비동기적으로 작동하는 함수를 사용하기 어려운 경우에도 함수를 쉽게 사용할 수 있습니다. pbkdf2Sync 함수는 총 5개의 인자를 받습니다. 첫번째는 암호화할 패스워드, 두번째는 솔트, 세번째는 반복 횟수, 네번째는 출력 바이트 수, 다섯번째는 해시 알고리즘입니다.


const crypto = require("crypto");

const creasteHashedPassword = (password) => {
  crypto.randomBytes(32, (err, buf) => {
    const salt = buf.toString("base64");

    crypto.pbkdf2(password, salt, 1000, 32, "sha512", (err, key) => {
      const pbkdf2Key = key.toString("base64");

      function verify(password, hashedPassword, salt) {
        const iterations = 1000;
        const keyLength = 32;
        const digest = "sha512";

        const hashedInputPassword = crypto
          .pbkdf2Sync(password, salt, iterations, keyLength, digest)
          .toString("base64");
        console.log(hashedPassword === hashedInputPassword);
        return hashedPassword === hashedInputPassword;
      }

      verify("password123", pbkdf2Key, salt);
    });
  });
};

creasteHashedPassword("password123");
profile
멋지게 기록하자

0개의 댓글