[javascript] Express.js에서의 데이터 암호화 방법

Express.js는 Node.js를 기반으로한 웹 애플리케이션 프레임워크로, 데이터의 보안성은 매우 중요합니다. 특히 사용자의 비밀번호와 같은 민감한 정보를 암호화하여 저장해야 합니다. 이번 블로그에서는 Express.js에서 데이터를 어떻게 암호화하는지 알아보겠습니다.

bcrypt를 사용한 비밀번호 암호화

비밀번호는 해시 함수를 이용하여 암호화해야 합니다. 여러 해시 함수 중에서 bcrypt를 사용하면 안전한 비밀번호 암호화를 할 수 있습니다. bcrypt는 솔트(salt)를 사용하여 비밀번호를 보다 안전하게 암호화합니다.

const bcrypt = require("bcrypt");
const saltRounds = 10;

const password = "secretPassword";

bcrypt.hash(password, saltRounds, function(err, hash) {
  // 암호화된 해시 값을 DB에 저장
});

위의 예제 코드에서 bcrypt.hash() 함수는 비밀번호를 해시 값을 생성하는데 사용됩니다. 첫 번째 인자는 암호화할 비밀번호이고, 두 번째 인자는 솔트의 강도를 나타내는 값입니다. 암호화가 완료되면 콜백 함수를 통해 암호화된 해시 값을 얻을 수 있습니다.

Express.js에서 암호화된 비밀번호의 일치 여부 확인하기

비밀번호 일치 여부를 확인하기 위해서는 입력된 비밀번호와 DB에 저장된 암호화된 값이 일치하는지 확인해야 합니다. bcrypt.compare() 함수를 사용하여 확인할 수 있습니다.

const bcrypt = require("bcrypt");

const password = "secretPassword";
const hashedPassword = "암호화된 해시 값";

bcrypt.compare(password, hashedPassword, function(err, result) {
  if (result) {
    // 비밀번호가 일치함
  } else {
    // 비밀번호가 일치하지 않음
  }
});

위의 코드에서 bcrypt.compare() 함수는 입력된 비밀번호와 암호화된 비밀번호를 비교하여 결과를 반환합니다. 결과가 true인 경우, 비밀번호가 일치함을 의미합니다.

SSL/TLS를 이용한 데이터 암호화

HTTPS를 통해 데이터를 전송하는 경우 SSL/TLS를 이용하여 데이터를 암호화할 수 있습니다. Express.js에서 HTTPS 서버를 생성하고 인증서를 사용하여 데이터를 암호화할 수 있습니다.

const https = require("https");
const fs = require("fs");

const options = {
  key: fs.readFileSync("privateKey.pem"),
  cert: fs.readFileSync("certificate.pem")
};

https.createServer(options, app).listen(3000, function() {
  console.log("HTTPS 서버가 3000번 포트에서 실행 중...");
});

위의 코드에서 fs.readFileSync() 함수를 통해 privateKey.pem 및 certificate.pem 파일을 읽어옵니다. options 객체를 통해 키파일과 인증서파일을 설정하고, createServer() 함수를 통해 HTTPS 서버를 생성합니다.

요약

Express.js에서 데이터 암호화는 보안을 강화하기 위한 중요한 작업입니다. 비밀번호는 bcrypt를 사용하여 안전하게 암호화하고, SSL/TLS를 이용하여 데이터 전송시에 암호화를 적용할 수 있습니다. 이를 통해 Express.js 기반의 웹 애플리케이션의 보안성을 강조할 수 있습니다.

참고 자료