Apidogのレスポンスデータをデコードおよび復号化する方法
時には、APIのレスポンスデータがエンコードまたは暗号化されていることがあり、可読のプレーンテキストに変換する必要があるかもしれません。これは、Apidog の組み込みJSライブラリを使用するか、PythonやJavaScriptなどの外部プログラミング言語を呼び出して処理することで実現できます。
例えば、Base64エンコードされたデータは、組み込みライブラリを使用してデコードできます。
以下では、デコードおよび復号の一般的な例をいくつか紹介します。まだApidogをインストールしていない場合は、始めるためにボタンをクリックしてください!
レスポンスデータのデコード
Base64デコード
APIがBase64エンコードされたデータを返す場合、Apidogに組み込まれているCryptoJSライブラリを使用してデコードできます。やり方は次の通りです:
APIが以下のBase64エンコードされたデータを返すと仮定します:
{"data": "SGVsbG8gd29ybGQh"}
このBase64データを次のようなスクリプトでデコードできます:
// CryptoJSライブラリをインポート
const CryptoJS = require("crypto-js");
// Base64エンコードされた文字列(レスポンスデータから抽出したもの)let encodedData = {"data": "SGVsbG8gd29ybGQh"
};
// Base64データをデコードlet decodedData = CryptoJS.enc.Base64.parse(encodedData.data).toString(CryptoJS.enc.Utf8);
// デコードされた結果を出力
console.log(decodedData); // "Hello, world!"
Apidog内では、上記のロジックを使用して「Post-request」セクションにカスタムスクリプトを追加できます。リクエストを送信した後、レスポンスパネルの「Console」でデコードされたデータを表示できます。
さらに、将来使用するためにデコードされたデータを環境変数に格納することもできます。例えば:
pm.environment.set("decodedData", decodedData);
レスポンスのJSONにBase64エンコードされたデータが含まれている場合も、CryptoJSを使用してデコードし、デコードされたJSONデータをpm.response.setBody()
メソッドでレスポンスボディとして設定できます。以下はBase64エンコードされたJSONレスポンスの例です:
それをデコードし、デコードされたJSONデータをレスポンスボディに表示するためのサンプルスクリプトは次のとおりです:
// CryptoJSライブラリをインポート
const CryptoJS = require("crypto-js");
// Base64エンコードされた文字列(レスポンスデータから抽出したもの)let encodedData = pm.response.text();
// Base64データをデコードlet decodedData = CryptoJS.enc.Base64.parse(encodedData).toString(CryptoJS.enc.Utf8);
// デコードされたJSON文字列を解析するlet jsonData = JSON.parse(decodedData);
// 解析されたJSONデータをレスポンスボディとして設定
pm.response.setBody(JSON.stringify(jsonData));
URLエンコードデコード
レスポンスデータがURLエンコードされている場合、JavaScriptの組み込みdecodeURIComponent()
メソッドを使用してデコードできます。
例えば、次のURLエンコードされたJSON文字列を返すAPIを考えてみましょう:
{"name": "%E5%BC%A0%E4%B8%89","email": "qxhswppn%40gmail.com"
}
このJSON文字列の値を次のようにデコードできます:
// これはレスポンスからのURLエンコードされたJSONデータlet response = {"name": "%E5%BC%A0%E4%B8%89","email": "qxhswppn%40gmail.com"
};
// decodeURIComponentを使用してデコードlet decodedName = decodeURIComponent(response.name);
let decodedEmail = decodeURIComponent(response.email);
console.log(decodedName); // "Jason"
console.log(decodedEmail); // "qxhswppn@gmail.com"
レスポンスデータの復号
AES復号
AESで暗号化された暗号文を復号するには、適切なキーまたは初期化ベクタ(IV)を提供する必要があります。AESは対称暗号化を使用しており、暗号化と復号には同じキーが使用されます。正しいキーやIVがない場合、暗号文を復号することはできません。
ECBモードでAESで暗号化された暗号文を持っていると仮定すると、以下のようにCryptoJSライブラリを使用してApidogで復号できます:
// CryptoJSライブラリをインポートconst CryptoJS = require('crypto-js');
// Base64エンコードされたAES暗号文(レスポンスデータから抽出したもの)const ciphertext = "Gig+YJFu4fLrrexzam/vblRV3hoT25hPZn0HoNoosHQ=";
// 復号用のキー(16/24/32バイトであることを確認;通常は環境変数から読み取る)const key = CryptoJS.enc.Utf8.parse('1234567891234567');
// AES復号const decryptedBytes = CryptoJS.AES.decrypt(ciphertext, key, {
mode: CryptoJS.mode.ECB, // 復号モード
padding: CryptoJS.pad.Pkcs7 // パディングメソッド
});
// 復号されたバイト配列をUTF-8文字列に変換const originalText = decryptedBytes.toString(CryptoJS.enc.Utf8);
// 復号されたテキストを出力
console.log(originalText); // "Hello, Apidog!"
復号されたデータはレスポンスコンソールで見ることができます。
RSA復号
RSAで暗号化された暗号文を復号するには、対応するRSA秘密鍵を提供する必要があります。RSAは非対称暗号化アルゴリズムであり、鍵ペアは公開鍵と秘密鍵で構成され、秘密鍵は復号に不可欠です。
Apidogにはjsrsasign
ライブラリが含まれており(最新バージョンに更新)、RSA暗号文を復号するために使用できます。次はその例です:
// jsrsasignライブラリをインポート
const jsrsasign = require('jsrsasign');
// 秘密鍵を定義(通常は環境変数から読み取る)
const privateKeyPEM = `
-----BEGIN PRIVATE KEY-----
秘密鍵...
-----END PRIVATE KEY-----
`;
// 暗号文を定義(通常はレスポンスデータから抽出したもの)
const ciphertext = '';
// 復号
const prvKeyObj = jsrsasign.KEYUTIL.getKey(privateKeyPEM);
const decrypted = jsrsasign.KJUR.crypto.Cipher.decrypt(ciphertext, prvKeyObj);
console.log(decrypted);
簡単なRSA暗号化と復号の完全な例の参照(jsrsasignのバージョンは10.3.0で、他のバージョンの構文は互換性がない場合があります)は、Node.js環境で実行し、必要に応じてApidogで暗号化または復号操作を実行できます:
const rsa = require('jsrsasign');
// RSA鍵ペアを生成
const keypair = rsa.KEYUTIL.generateKeypair("RSA", 2048);
const publicKey = rsa.KEYUTIL.getPEM(keypair.pubKeyObj);
const privateKey = rsa.KEYUTIL.getPEM(keypair.prvKeyObj, "PKCS8PRV");
console.log("公開鍵:", publicKey);
console.log("秘密鍵:", privateKey);
// 公開鍵で暗号化
const plaintext = "Hello, Apidog!";
const pubKeyObj = rsa.KEYUTIL.getKey(publicKey);
const encryptedHex = rsa.KJUR.crypto.Cipher.encrypt(plaintext, pubKeyObj);
console.log("暗号化された鍵:", encryptedHex);
// 秘密鍵で復号
const prvKeyObj = rsa.KEYUTIL.getKey(privateKey);
const decrypted = rsa.KJUR.crypto.Cipher.decrypt(encryptedHex, prvKeyObj);
console.log("復号されたプレーンテキスト:", decrypted);
復号のための外部プログラムの使用
Apidogの組み込みJSライブラリを使用して復号するだけでなく、「外部プログラム」を呼び出して復号を実行することもできます。外部プログラムの使用に関する詳細については、Apidogのヘルプセンターで詳細な指示を確認できます。
.jar
ファイルや、他の言語のスクリプト用の.py
、.php
、.js
などのコードファイルが含まれます。このディレクトリには、Apidogインターフェースの右上隅にある「設定 -> 外部プログラム」を通じてアクセスできます。例:Node.jsでのRSA復号
node-forge
ライブラリを使用してNode.jsでRSA復号を行いたい場合、外部プログラムディレクトリに.js
ファイルを作成して復号ロジックを実装できます。以下はその手順です:
- 復号スクリプトを作成まず
.js
ファイルを作成し、復号ロジックを実装します。node-forge
ライブラリを使用するため、そのディレクトリにnpmまたはyarnでインストールします。以下のようなスクリプトになります:
// node-forgeライブラリをインポート
const forge = require('node-forge');
// コマンドライン引数を取得
const args = process.argv.slice(2);
// お使いの秘密鍵(PEM形式)
const privateKeyPem = `
-----BEGIN RSA PRIVATE KEY-----
秘密鍵……
-----END RSA PRIVATE KEY-----`;
// コマンドラインからの暗号化された暗号文
const encrypted = args[0];
// PEM形式の秘密鍵をforgeの秘密鍵オブジェクトに変換
const privateKey = forge.pki.privateKeyFromPem(privateKeyPem);
// Base64エンコードされた暗号化データをバイト配列に変換
const encryptedBytes = forge.util.decode64(encrypted);
// データを復号
const decrypted = privateKey.decrypt(encryptedBytes, 'RSA-OAEP');
// console.log()出力はApidogによってキャプチャされます
console.log(decrypted);
- Apidogで外部プログラムを呼び出す復号スクリプトを書いたら、Apidogの「Post-request」セクションで
pm.executeAsync()
メソッドを使用してこの外部プログラムを呼び出すことができます。復号スクリプトが正しい外部プログラムディレクトリに配置されていることを確認し、参照するパスがそのディレクトリに対して相対的であることを確認してください。呼び出す方法は次のとおりです:
// 暗号化された暗号文(通常はレスポンスデータから取得)
const encrypted = 'iDqUyR3BpaTqpzq…………';
// 外部プログラムパス、パラメータを渡す
const result = await pm.executeAsync('./nodejs-rsa/rsa.js', [`${encrypted}`]);
console.log('結果:', result);
Apidogでリクエストを送信すると、定義した外部プログラムに暗号文が自動的に渡され、復号が行われ、console.log()
を介して結果出力がキャプチャされ、最終的に復号されたプレーンテキストが返されます。
このような復号はNode.jsに限らず、Java、PHP、Python、Goなどの他のプログラミング言語でも同様の操作と呼び出しが可能です。
結論
この記事で概説した方法を使用すると、Apidogでレスポンスデータを効果的にデコードおよび復号し、可読のプレーンテキストに変換できます。今すぐApidogを試してみてください!