Node.jsのcipher.update()メソッドとは?使い方と実例をわかりやすく解説
cipher.update()は、指定されたエンコード形式に従って、受信したデータで暗号(cipher)を更新するために使用されるメソッドです。Node.jsのcryptoモジュール内にあるCipherクラスが提供する組み込みメソッドの一つであり、ストリーム方式でデータを段階的に暗号化したい場合に活用されます。
なお、入力エンコーディング(inputEncoding)を指定した場合、data引数は文字列として扱われ、指定しない場合はBuffer(バッファ)である必要があります。
構文
cipher.update(data, [inputEncoding], [outputEncoding])
パラメータ
各パラメータの詳細は以下の通りです。
data – 暗号の内容を更新するために入力として渡すデータです。文字列またはBufferを指定できます。
inputEncoding – 入力データのエンコーディングを指定するパラメータです。指定可能な値には、hex、base64、utf8などがあります。
outputEncoding – 出力結果のエンコーディングを指定するパラメータです。このパラメータの型は文字列で、指定可能な値にはhex、base64などがあります。
サンプルコード①:scryptSyncを使った基本的な例
まず、cipherUpdate.jsという名前のファイルを作成し、以下のコードをコピーしてください。ファイル作成後、次のコマンドでコードを実行できます。
node cipherUpdate.js
cipherUpdate.js
// cipher.final()メソッドの使用例
// cryptoモジュールをインポート
const crypto = require('crypto');
// AESアルゴリズムを初期化
const algorithm = 'aes-192-cbc';
// 鍵の生成に使用するパスワードを設定
const password = '12345678123456789';
// 暗号オブジェクト用の鍵を取得
const key = crypto.scryptSync(password, 'old data', 24);
// 固定のiv(初期化ベクトル)を初期化
const iv = Buffer.alloc(16, 0);
// 暗号オブジェクトを作成
const cipher = crypto.createCipheriv(algorithm, key, iv);
// 新しいデータで更新された文字列を取得
let updatedValue = cipher.update('Welcome to tutorials point', 'utf8', 'hex');
// 更新値と最終値を連結
updatedValue += cipher.final('hex');
// 結果を出力
console.log("Updated String:- " + updatedValue);出力結果
C:\home\node>> node cipherUpdate.js Updated String:- a05e87569f3f04234812ae997da5684944c32b8776fae676b4abe9074b31cd2a
サンプルコード②:非同期のscryptを使った例
続いて、もう一つの例を見てみましょう。こちらは鍵の生成に非同期版のscrypt()を使用しています。
// cipher.final()メソッドの使用例
// 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);
// 暗号オブジェクトを作成
const cipher = crypto.createCipheriv(algorithm, key, iv);
// 新しいデータで更新された文字列を取得
let updatedValue = cipher.update('Some new text data', 'utf8', 'hex');
// 更新値と最終値を連結
updatedValue += cipher.final('hex');
// 結果を出力
console.log("Updated String:- " + updatedValue);
});出力結果
C:\home\node>> node cipherUpdate.js Updated String:- 91d6d37e70fbae537715f0a921d15152194435b96ce3973d92fbbc4a82071074
まとめ
cipher.update()メソッドは、データを分割して順次暗号化する際に中心的な役割を担うメソッドです。大きなファイルやストリームデータを扱う場合にも効率的に処理でき、最後にcipher.final()を呼び出すことで暗号化プロセスを完了させます。エンコーディングの指定方法を正しく理解することで、安全かつ柔軟な暗号化処理を実装できます。
-
Node.jsのprocess.argv0プロパティとは?使い方とprocess.argv[0]との違いを解説
Node.jsでは、アプリケーション起動時に渡された元のargv[0]の値を、読み取り専用のコピーとして保持するための仕組みとしてprocess.argv0が用意されています。このプロパティを参照することで、Node.jsプロセスが起動された際の実行ファイル名を簡単に取得できます。 構文 process.argv0 パラメータ process.argv0は、保存されているargv[0]の読み取り専用コピーを返すだけのため、ユーザーからの入力(引数)は一切不要です。なお、これは関数ではなくプロパティである点に注意してください。括弧を付けて呼び出すのではなく、単純に参照するだけで値が取得できます。
-
【Node.js入門】process.argvでコマンドライン引数を取得する方法
process.argv は、Node.js プロセスの起動時にコマンドラインから渡されたすべての引数を配列として返すプロパティです。配列の最初の要素には必ず process.execPath と同じ値(Node.js 実行バイナリへの絶対パス)が含まれ、2番目の要素には実行中のJavaScriptファイルのパスが格納されます。それ以降の要素には、ユーザーが指定した追加の引数が順番に並びます。 構文 process.argv パラメータ process.argv は、Node.js プロセス起動時に渡されたコマンドライン引数をすべて取得するためのものであり、ユーザーが何かを入力する必要はありま