JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

Node.jsのdecipher.update()メソッドの使い方を徹底解説


decipher.update()メソッドは、指定されたエンコード形式に従って、受信したデータでdecipher(復号)オブジェクトを更新するために使用されるメソッドです。cryptoモジュール内のDecipherクラスが提供する組み込みメソッドの一つであり、暗号化されたデータを段階的に復号する際に重要な役割を果たします。

なお、入力エンコーディングを指定した場合、data引数は文字列として扱われ、指定しない場合はBuffer(バッファ)として扱われる点に注意が必要です。

構文

decipher.update(data, [inputEncoding], [outputEncoding])

パラメータ

各パラメータの詳細は以下の通りです。

  • data – decipherの内容を更新するために入力されるデータです。暗号化された文字列やバッファを渡します。

  • inputEncoding – 入力データのエンコーディングを指定するパラメータです。「hex」「base64」などの値を指定できます。

  • outputEncoding – 出力データのエンコーディングを指定するパラメータです。文字列型で指定し、「hex」「base64」などの値が利用可能です。

使用例1:同期処理での復号

まず、「decipherUpdate.js」という名前のファイルを作成し、以下のコードをコピーしてください。ファイル作成後、次のコマンドを実行してコードを動かすことができます。

node decipherUpdate.js

decipherUpdate.js

// decipher.update() メソッドの使用例

// cryptoモジュールのインポート
const crypto = require('crypto');

// AESアルゴリズムの初期化
const algorithm = 'aes-192-cbc';
// 鍵の生成に使用するパスワード
const password = '12345678123456789';

// decipherオブジェクト用の鍵を取得
const key = crypto.scryptSync(password, 'old data', 24);

// 静的なIV(初期化ベクトル)の初期化
const iv = Buffer.alloc(16, 0);

const decipher = crypto.createDecipheriv(algorithm, key, iv);

// 復号対象の暗号化済みデータ
const encrypted = '083bfe1b2f91677e5d00add115be2f1b2e362e190406f5c6b60e86969bf03bff';

// hex形式の入力をutf8形式へ復号
let decryptedValue = decipher.update(encrypted, 'hex', 'utf8');

decryptedValue += decipher.final('utf8');

// 結果の出力
console.log("Decrypted value -- " + decryptedValue);

出力結果

C:\home\node>> node decipherUpdate.js
Decrypted value -- Some new text data

使用例2:非同期処理での復号

続いて、もう一つの例を見てみましょう。こちらはcrypto.scrypt()を非同期で使用し、コールバック関数内で復号処理を行うパターンです。

// decipher.update() メソッドの使用例(非同期版)

// cryptoモジュールのインポート
const crypto = require('crypto');

// AESアルゴリズムの初期化
const algorithm = 'aes-192-cbc';
// 鍵の生成に使用するパスワード
const password = '12345678123456789';

// scryptで鍵を非同期に生成
crypto.scrypt(password, 'salt', 24,
    { N: 512 }, (err, key) => {
        if (err) throw err;

    // 静的なIV(初期化ベクトル)の初期化
    const iv = Buffer.alloc(16, 0);

    // アルゴリズム・鍵・IVを使ってdecipherを初期化
    const decipher = crypto.createDecipheriv(algorithm, key, iv);
    const encrypted = '91d6d37e70fbae537715f0a921d15152194435b96ce3973d92fbbc4a82071074';

    // 暗号化データから平文を取得
    const decrypted = decipher.update(encrypted, 'hex', 'utf8');

    // 結果の出力
    console.log("Decrypted value:- " + decrypted);
});

出力結果

C:\home\node>> node decipherUpdate.js
Decrypted value:- Some new text data

まとめ

decipher.update()は、ストリーム処理にも対応しており、大きなデータを分割して復号できる柔軟性を持っています。最後のdecipher.final()を呼び出すことで残りの復号処理が完了し、完全な平文が得られます。暗号化・復号処理を実装する際は、アルゴリズム・鍵・IV(初期化ベクトル)を暗号化側と一致させることが重要です。

  1. Node.jsのprocess.argv0プロパティとは?使い方とprocess.argv[0]との違いを解説

    Node.jsでは、アプリケーション起動時に渡された元のargv[0]の値を、読み取り専用のコピーとして保持するための仕組みとしてprocess.argv0が用意されています。このプロパティを参照することで、Node.jsプロセスが起動された際の実行ファイル名を簡単に取得できます。 構文 process.argv0 パラメータ process.argv0は、保存されているargv[0]の読み取り専用コピーを返すだけのため、ユーザーからの入力(引数)は一切不要です。なお、これは関数ではなくプロパティである点に注意してください。括弧を付けて呼び出すのではなく、単純に参照するだけで値が取得できます。

  2. 【Node.js入門】process.argvでコマンドライン引数を取得する方法

    process.argv は、Node.js プロセスの起動時にコマンドラインから渡されたすべての引数を配列として返すプロパティです。配列の最初の要素には必ず process.execPath と同じ値(Node.js 実行バイナリへの絶対パス)が含まれ、2番目の要素には実行中のJavaScriptファイルのパスが格納されます。それ以降の要素には、ユーザーが指定した追加の引数が順番に並びます。 構文 process.argv パラメータ process.argv は、Node.js プロセス起動時に渡されたコマンドライン引数をすべて取得するためのものであり、ユーザーが何かを入力する必要はありま