Apidog

オールインワンのAPI開発プラットフォーム

API設計

API仕様書生成

API設計

API Mock

APIテスト自動化

無料登録
Home / ソリューション / CryptoJSでリクエストパラメータのAES暗号化を行う

CryptoJSでリクエストパラメータのAES暗号化を行う

本文では、使いやすいAPI管理ツールのApidogを使って、AES暗号化アルゴリズムのCrypto.jsを使ってpasswordパラメータを暗号化して渡す方法を皆さんに紹介します。

APIにリクエスト送信する場合、passwordというパラメータをAES暗号化してから、バックエンドサーバーに渡すには、どうしたらいいですか?本文では、使いやすいAPI管理ツールのApidogを使って、AES暗号化アルゴリズムを使ってpasswordパラメータを暗号化して渡す方法を皆さんに紹介します。

AES暗号化アルゴリズムとは?

AES (Advanced Encryption Standard)は、データを安全に暗号化するための広く使われている対称キー暗号化アルゴリズムです。

主な特徴は以下の通りです。

  • 対称キー暗号方式:同一の秘密鍵を使って暗号化と復号を行います。
  • 堅牢性が高い:現在知られている総ての攻撃手法に対して高い安全性を有しています。
  • 高速:ソフトウェアとハードウェアの両方で高速に動作します。
  • 可変の鍵長:128ビット、192ビット、256ビットの3種類の鍵長をサポートしています。鍵が長いほど安全性が高くなります。
  • 多くの規格で採用:政府機関、金融機関など、様々な分野の規格で暗号化アルゴリズムとして採用されています。

AESは安全性と効率性が高いため、現在最も広く使われている暗号化アルゴリズムの一つとなっています。個人情報、金融データ、機密情報の保護に広く利用されています。

ApidogでAES暗号化アルゴリズムを利用する方法

ApidogでAES暗号化アルゴリズムを利用してpasswordパラメータを暗号化するには、「前処理」でJavaScriptコードを追加して、CryptoJSライブラリーを利用してAES暗号化を実現する必要があります。

button

Apidogで「ログイン」APIを開き、「前処理」で「カスタムScript」を追加します。ここで暗号化用のScriptを追加することができます。

カスタムScriptの追加

ご案内:この「カスタムScirpt」は、「変数置換&親を継承」の前に置く必要があります。

CryptoJSライブラリの利用

CryptoJSは非常に人気のJavaScriptライブラリとして、暗号化アルゴリズムを実現することができます。例えば、AES、DES、TripleDES、Rabbit、RC4、MD5、SHA-1、SHA-256などのアルゴリズムにも対応しています。CryptoJSライブラリを利用すると、クライアントサイドとサーバーサイド両方でも簡単に暗号化アルゴリズムを実現し、データのセキュリティを保証することができます。

Apidogでは、CryptoJSライブラリを内蔵していますので、それを直接に利用することができます。

var cryptoJs = require("crypto-js");

AES暗号化Scriptの編集

パスワードパラメータのフィールド名がpasswordである場合、それをまず環境変数に保存して、特定の値(サンプル値:123456)を設定するか、Scriptで直接にパラメータ値を設定する必要があります。

環境変数を作成

そして、CryptoJSライブラリを使ってpasswordパラメータをAES暗号化して、それを新しい環境変数encryptedPasswordに保存できます。

Scriptのサンプル:

// crypto-js モジュールをインポートする
var cryptoJs = require("crypto-js");

// パスワードの取得方法は実際の状況に応じて調整する
// これは暗号化する必要のある password フィールドの値で、環境変数から取得したと仮定する
const password = pm.environment.get("password"); // または他の方法で取得する、例えば直接割り当てるなど

// 安全な方法で決められた鍵とIV(ここでは説明を簡単にするために例示されていますが、実際のアプリケーションではこれらの機密情報を適切に保護する必要があります)
const key = cryptoJs.enc.Utf8.parse('mySecretKey12345'); // 16/24/32バイトであることを確認する
const iv = cryptoJs.enc.Utf8.parse('myIVmyIVmyIVmyIV'); // 16バイトであることを確認する

// AES暗号化
const encrypted = cryptoJs.AES.encrypt(password, key, {
iv: iv,
mode: cryptoJs.mode.CBC,
padding: cryptoJs.pad.Pkcs7
}).toString();

// 暗号化されたパスワードを新しい変数に設定し、リクエストボディ内で使用できる
pm.environment.set("encryptedPassword", encrypted);

上記のScriptでは、まずcrypto-jsライブラリをインポートしています。crypto-jsは、JavaScriptで暗号化と復号化を行うためのライブラリです。

そして、環境変数からpasswordの値を取得しています。実際のアプリケーションでは、パスワードを安全な方法で取得する必要があります。

また、AES暗号化に使用する秘密鍵(key)と初期化ベクトル(iv)を設定しています。これらの値は、安全に管理される必要があります。

さらに、実際にAES暗号化を行っています。passwordkeyivを使用し、CBC (Cipher Block Chaining) モードとPKCS7パディングを指定しています。

最後に、暗号化されたパスワードを環境変数encryptedPasswordに保存しています。これにより、リクエストボディ内で使用できるようになります。

Apidogの前処理にこのスクリプトを追加すると、平文のパスワードがAES暗号化され、暗号化された値が新しい環境変数に格納されます。この暗号化された値は、安全にサーバーに送信できます。

暗号化用のScriptを前処理に追加

リクエストBodyでパスワードを暗号化

リクエストBody(JSONフォーマットと仮定)の中で、暗号化済みのパスワードを利用します。

{
  "username": "yamada",
  "password": "{{encryptedPassword}}"
}
リクエストボディを追加

リクエストを送信

「送信」ボタンをクリックしてリクエストを送信することができます。そして、「実際のRequest」をクリックして、送信したpasswordフィールドが暗号化されていることを確認できますね。

追記:FastAPIのAES暗号化Scriptのサンプル

次のコードは、FastAPIを利用して作成したAES暗号化Scriptになります。興味があれば、これらのScriptを.pyファイルに入れて実行すると、http://127.0.0.1:8000/decrypt は本文で紹介したリクエストのケースになります。

実行する前に、関連のモジュールをインストールする必要もありますので、`pip install pycryptodome`などのコマンドを使って欠けているモジュールをインストールしましょう。

次のようにエラーメッセージを参照しながら、必要なモジュールをインストールしましょう。

エラーコード
from fastapi import FastAPI
from pydantic import BaseModel
from Crypto.Cipher import AES
import base64
import uvicorn

app = FastAPI()

# 関数の複合化
def decrypt_password(password: str, key: bytes, iv: bytes) -> str:
    cipher = AES.new(key, AES.MODE_CBC, iv)
    decrypted_bytes = cipher.decrypt(base64.b64decode(password))
    # パディング(余白)を除去
    unpadded_password = decrypted_bytes[:-decrypted_bytes[-1]].decode("utf-8")
    return unpadded_password

class DecryptionRequest(BaseModel):
    username: str
    password: str

@app.post("/decrypt")
async def decrypt_password_endpoint(request: DecryptionRequest):
    # AES暗号化の鍵と初期化ベクトル (IV) を設定
    key = b'mySecretKey12345'
    iv = b'myIVmyIVmyIVmyIV'
    password = request.password
    decrypted_password = decrypt_password(password, key, iv)
    return {"username": request.username, "password": decrypted_password}

if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000)

まとめ

この記事では、Apidogを使ってAPI呼び出し時にパスワードなどの機密データをAES暗号化する方法を紹介しました。ApidogでAES暗号化を実装するには、主に次の数ステップが必要:

  • 「前処理」でカスタムJavaScriptを追加
  • CryptoJSライブラリを使ってAES暗号化を実装
  • 平文のパスワードを暗号化し、環境変数に保存
  • リクエストボディで暗号化済みのパスワードを使用

機密データを安全に送信するには、適切な暗号化が不可欠です。ApidogではカスタムScriptを使ってAES暗号化を簡単に実装できます。この手順に従えば、APIリクエストの機密情報を適切に保護できます。実務でAPIを扱う際は、このような暗号化の対策を講じることが求められます。

Apidogのニュースレターを購読する

今すぐ購読すると、いつでもApidogから更新情報と最新観点を手に入れることができます。