【エンジニア必見】Node.jsのCryptoモジュールでHMAC-SHA1ハッシュを操る
Node.js Crypto を使って HMAC-SHA1 ハッシュを作成する方法
HMAC-SHA1 ハッシュは、メッセージの改ざん防止やデータの整合性を検証するために使用される暗号化ハッシュ関数です。 Node.js の crypto
モジュールを使用して、HMAC-SHA1 ハッシュを簡単に作成できます。
手順
- 必要なモジュールをインポートする
const crypto = require('crypto');
- HMAC オブジェクトを作成する
const key = 'mySecretKey'; // シークレットキーを設定
const message = 'This is my message'; // ハッシュ化するメッセージを設定
const hmac = crypto.createHmac('sha1', key);
- メッセージを更新する
hmac.update(message);
- ハッシュを生成する
const digest = hmac.digest('hex');
console.log(digest); // ハッシュ値を出力
例
const crypto = require('crypto');
const key = 'mySecretKey';
const message = 'This is my message';
const hmac = crypto.createHmac('sha1', key);
hmac.update(message);
const digest = hmac.digest('hex');
console.log(digest); // => 91a9045c46213df6767cb4973d0c17fd834921a2
ポイント
- HMAC-SHA1 ハッシュは、メッセージ認証コード (MAC) として使用できます。 MAC は、メッセージが送信者によって送信されたことを検証し、改ざんされていないことを確認するために使用されます。
- HMAC-SHA1 ハッシュは、パスワードのハッシュ化にも使用できます。 ただし、パスワードのハッシュ化には、より安全なアルゴリズム ( bcrypt または scrypt など) を使用する方が一般的です。
- シークレットキーは安全に保管する必要があります。 シークレットキーが漏洩すると、攻撃者がハッシュを偽造したり、メッセージを改ざんしたりすることができます。
- このコードは、Node.js バージョン 8.0 以降で動作します。
- より複雑なシナリオについては、Node.js Crypto モジュールのドキュメントを参照してください。
Node.js Crypto を使って HMAC-SHA1 ハッシュを作成するサンプルコード
const crypto = require('crypto');
const key = 'mySecretKey'; // シークレットキーを設定
const message = 'This is my message'; // ハッシュ化するメッセージを設定
const hmac = crypto.createHmac('sha1', key);
hmac.update(message);
const digest = hmac.digest('hex');
console.log(digest); // ハッシュ値を出力
このコードを実行すると、以下の出力が得られます。
91a9045c46213df6767cb4973d0c17fd834921a2
説明
const crypto = require('crypto');
この行は、crypto
モジュールをインポートします。 このモジュールは、暗号化操作に使用されるさまざまな機能を提供します。
const key = 'mySecretKey';
const message = 'This is my message';
const hmac = crypto.createHmac('sha1', key);
このコードブロックは、以下の操作を行います。
key
変数に格納されているシークレットキーを使用して、HMAC オブジェクトを作成します。message
変数に格納されているメッセージを、HMAC オブジェクトに設定します。
hmac.update(message);
この行は、HMAC オブジェクトにメッセージを更新します。
const digest = hmac.digest('hex');
console.log(digest);
- HMAC オブジェクトを使用して、メッセージのハッシュを生成します。
- ハッシュを 16 進数表記に変換し、
digest
変数に格納します。 digest
変数の値をコンソールに出力します。
Node.js で HMAC-SHA1 ハッシュを作成するその他の方法
crypto.subtle
モジュールは、WebAssembly を使用して暗号化操作をハードウェアで高速化するために設計されています。 HMAC-SHA1 ハッシュを作成するには、以下の手順を実行できます。
const crypto = require('crypto');
const { subtle } = crypto;
const key = new TextEncoder().encode('mySecretKey'); // シークレットキーを Uint8Array に変換
const message = new TextEncoder().encode('This is my message'); // メッセージを Uint8Array に変換
async function generateHash() {
const algorithm = { name: 'HMAC', hash: 'SHA-1' };
const keyBuffer = await subtle.importKey('raw', key, algorithm);
const digestBuffer = await subtle.sign(keyBuffer, message);
const digest = new TextDecoder().decode(digestBuffer);
console.log(digest); // ハッシュ値を出力
}
generateHash();
外部ライブラリを使用する
Node.js には、HMAC-SHA1 ハッシュの作成を容易にするさまざまな外部ライブラリが用意されています。 人気のあるライブラリの 1 つは crypto-js
です。 以下の手順でインストールして使用できます。
npm install crypto-js
ライブラリをインストールしたら、以下のコードを使用して HMAC-SHA1 ハッシュを作成できます。
const CryptoJS = require('crypto-js');
const key = 'mySecretKey';
const message = 'This is my message';
const hash = CryptoJS.HMAC(CryptoJS.SHA1, message, key);
const digest = hash.toString(CryptoJS.enc.Hex);
console.log(digest); // ハッシュ値を出力
それぞれの方法の比較
- crypto モジュール: これは、Node.js の標準ライブラリに含まれているため、追加のインストールが不要です。 ただし、
crypto.subtle
モジュールほど高速ではありません。 - crypto.subtle モジュール: このモジュールは、ハードウェア アクセラレーションを使用して HMAC-SHA1 ハッシュを高速に作成できます。 ただし、すべてのブラウザでサポートされているわけではありません。
- 外部ライブラリ: 外部ライブラリは、追加機能や使いやすさを提供する場合があります。 ただし、プロジェクトに追加の依存関係を追加する必要があります。
どの方法を使用するかは、特定のニーズと要件によって異なります。 パフォーマンスが重要な場合は、crypto.subtle
モジュールを使用するのが最良の方法です。 シンプルさと使いやすさを重視する場合は、crypto
モジュールまたは外部ライブラリを使用することを検討してください。
javascript node.js algorithm