Blog#193: 🔐Node.js Expressで機密データを暗号化およびハッシュ化で保護する方法

193

こんにちは、私はトゥアンと申します。東京からフルスタックWeb開発者です。 将来の有用で面白い記事を見逃さないように、私のブログをフォローしてください。😊

この記事では、Node.js Expressアプリケーションで機密データを暗号化およびハッシュ化を使って保護する方法を詳しく説明します。以下のトピックについて説明します。

  1. 暗号化とハッシュ化の概要
  2. Node.js Crypto モジュールを使用したデータの暗号化
  3. Node.js Crypto モジュールを使用したデータのハッシュ化
  4. Express での暗号化とハッシュ化の実装
  5. 結論

1. 暗号化とハッシュ化の概要

パスワード、個人情報、金融情報などの機密データは、保存や送信する際に保護する必要があります。機密データを保護する一般的な方法は、暗号化とハッシュ化です。

暗号化は、データを秘密のコードに変換して、不正アクセスを防ぐプロセスです。暗号化と復号化の両方で秘密鍵を使用し、データにアクセスできるのは承認された者だけです。暗号化は可逆的であり、暗号化されたデータを元の形に復号化することができます。

ハッシュ化は、データを一定サイズの文字列(通常はハッシュ値)に変換する一方向関数です。暗号化とは異なり、ハッシュ化は不可逆的であり、ハッシュ値から元のデータを回復することはできません。このため、ハッシュ化はパスワードなどの機密データを保存するのに特に適しており、ハッシュ値が漏洩しても元のデータは安全です。

2. Node.js Crypto モジュールを使用したデータの暗号化

Node.js には、cryptoという暗号化を含む幅広い暗号化関数を提供する組み込みモジュールがあります。AES-256-CBCアルゴリズムを使用して対称暗号化を行う方法を見てみましょう。

依存関係のインストール

cryptoモジュールを使用するには、まず必要な依存関係をインストールします。

npm install --save crypto

データの暗号化と復号化

AES-256-CBCを使用してデータを暗号化および復号化する方法の例は以下の通りです:

const crypto = require("crypto");

const secretKey = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);

function encrypt(text) {
  const cipher = crypto.createCipheriv("aes-256-cbc", secretKey, iv);
  let encrypted = cipher.update(text, "utf8", "hex");
  encrypted += cipher.final("hex");
  return encrypted;
}

function decrypt(encrypted) {
  const decipher = crypto.createDecipheriv("aes-256-cbc", secretKey, iv);
  let decrypted = decipher.update(encrypted, "hex", "utf8");
  decrypted += decipher.final("utf8");
  return decrypted;
}

const originalText = "機密データ";
const encryptedText = encrypt(originalText);
const decryptedText = decrypt(encryptedText);

console.log("元のテキスト:", originalText);
console.log("暗号化されたテキスト:", encryptedText);
console.log("復号化されたテキスト:", decryptedText);

3. Node.js Crypto モジュールを使用したデータのハッシュ化

次に、SHA-256アルゴリズムを使用してデータをハッシュ化する方法を見てみましょう。

データのハッシュ化

SHA-256を使用してデータをハッシュ化する方法の例は以下の通りです:

const crypto = require("crypto");

function hashData(data) {
  return crypto
    .createHash("sha256")
    .update(data, "utf8")
    .digest("hex");
}

const data = "機密データ";
const hashedData = hashData(data);

console.log("データ:", data);
console.log("ハッシュ化されたデータ:", hashedData);

4. Express での暗号化とハッシュ化の実装

ここでは、Expressアプリケーションに暗号化とハッシュ化を統合する方法を説明します。

依存関係のインストール

まず、必要な依存関係をインストールします。

npm install --save express body-parser crypto

Expressアプリケーションのセットアップ

新しいExpressアプリケーションを作成し、必要なモジュールを含めます。

const express = require("express");
const bodyParser = require("body-parser");
const crypto = require("crypto");

const app = express();
app.use(bodyParser.json());

const secretKey = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);

Expressルートでデータを暗号化

POSTリクエストで送信されたデータを暗号化するための新しいルートを作成します。

app.post("/encrypt", (req, res) => {
  const text = req.body.text;

  if (!text) {
    return res.status(400).send("データが提供されていません");
  }

  const encryptedText = encrypt(text);
  res.status(200).send({ encrypted: encryptedText });
});

Expressルートでデータをハッシュ化

POSTリクエストで送信されたデータをハッシュ化するための別のルートを作成します。

app.post("/hash", (req, res) => {
  const data = req.body.data;

  if (!data) {
    return res.status(400).send("データが提供されていません");
  }

  const hashedData = hashData(data);
  res.status(200).send({ hash: hashedData });
});

Expressサーバーの開始

最後に、Expressサーバーを起動し、受信リクエストを待ち受けます。

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`サーバーはポート${PORT}で実行されています`);
});

これで、Expressアプリケーションは暗号化とハッシュ化された機密データのリクエストを受けることができます。

5. 結論

この記事では、Node.js Expressアプリケーションで機密データを暗号化およびハッシュ化を使用して保護する方法を説明しました。これらの技術を実装することで、アプリケーションのデータが安全で不正アクセスから保護されることを確認できます。

アプリケーションのセキュリティは、秘密鍵の安全な保管、安全な通信チャネル、適切なアクセス制御メカニズムなど、他の要素にも依存することに注意してください。アプリケーションとそのユーザーを保護するために、包括的なセキュリティアプローチを採用することが重要です。

最後

いつもお世話になっています。この記事を楽しんで、新しいことを学べたら嬉しいです。😊

今度の記事でお会いしましょう!この記事が気に入ったら、私を応援するために「LIKE」を押して登録してください。ありがとうございました。

NGUYỄN ANH TUẤN

Xin chào, mình là Tuấn, một kỹ sư phần mềm đang làm việc tại Tokyo. Đây là blog cá nhân nơi mình chia sẻ kiến thức và kinh nghiệm trong quá trình phát triển bản thân. Hy vọng blog sẽ là nguồn cảm hứng và động lực cho các bạn. Hãy cùng mình học hỏi và trưởng thành mỗi ngày nhé!

Đăng nhận xét

Mới hơn Cũ hơn