WebSocket メッセージの целостность を保証:Node.js で SHA-1 ハッシュを活用した方法
Node.js で Websocket を介して送受信されるメッセージの SHA-1 ハッシュを取得する方法
このチュートリアルでは、Node.js と crypto
モジュールを使用して、WebSocket メッセージの SHA-1 ハッシュを取得する方法を段階的に説明します。
必要なもの
- Node.js 12 以降
npm
またはyarn
パッケージマネージャー
手順
プロジェクトのセットアップ
npm install crypto
WebSocket サーバーの作成
以下のコードは、WebSocket サーバーを作成し、クライアントからのメッセージを処理して SHA-1 ハッシュを返す例です。
const WebSocket = require('ws'); const crypto = require('crypto'); const ws = new WebSocket.Server({ port: 8080 }); ws.on('connection', function(connection) { connection.on('message', function(message) { const hash = crypto.createHash('sha1').update(message).digest('hex'); console.log('Received message:', message); console.log('SHA-1 hash:', hash); connection.send(hash); }); });
const WebSocket = require('ws'); const ws = new WebSocket('ws://localhost:8080'); ws.on('open', function() { ws.send('Hello from client!'); }); ws.on('message', function(message) { console.log('Received SHA-1 hash:', message); });
コードの実行
以下のコマンドを実行して WebSocket サーバーを起動します。
node server.js
node client.js
クライアントがサーバーにメッセージを送信すると、サーバーはメッセージの SHA-1 ハッシュを計算し、クライアントに返します。
補足
- この例では、
crypto
モジュールのcreateHash()
メソッドを使用して SHA-1 ハッシュを計算しています。 - 他のハッシュアルゴリズムを使用するには、
createHash()
メソッドにアルゴリズムの名前を渡します。 - WebSocket メッセージはバイナリデータとして送信されるため、
update()
メソッドにバッファを渡す必要があります。 - SHA-1 ハッシュは 16 進数形式で返されます。
Node.js で Websocket を介して送受信されるメッセージの SHA-1 ハッシュを取得するサンプルコード
サーバー側コード (server.js)
const WebSocket = require('ws');
const crypto = require('crypto');
const ws = new WebSocket.Server({ port: 8080 });
ws.on('connection', function(connection) {
connection.on('message', function(message) {
const hash = crypto.createHash('sha1').update(message).digest('hex');
console.log('Received message:', message);
console.log('SHA-1 hash:', hash);
connection.send(hash);
});
});
クライアント側コード (client.js)
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.on('open', function() {
ws.send('Hello from client!');
});
ws.on('message', function(message) {
console.log('Received SHA-1 hash:', message);
});
- サーバー側コード:
WebSocket.Server
クラスを使用して WebSocket サーバーを作成します。connection
イベントリスナーは、クライアントが接続したときに呼び出されます。message
イベントリスナーは、クライアントからメッセージを受信したときに呼び出されます。- 計算されたハッシュをコンソールにログ出力し、クライアントに送信します。
- クライアント側コード:
open
イベントリスナーは、サーバーとの接続が確立されたときに呼び出されます。- クライアントは "Hello from client!" というメッセージをサーバーに送信します。
- 受信したメッセージ (SHA-1 ハッシュ) をコンソールにログ出力します。
このコードを実行する方法
このサンプルコードをどのように拡張できますか?
- メッセージの SHA-1 ハッシュをデータベースに保存することができます。
- ハッシュ値に基づいてメッセージをフィルタリングすることができます。
- 複数のクライアントにメッセージをブロードキャストすることができます。
Node.js で WebSocket メッセージの SHA-1 ハッシュを取得するその他の方法
ws-sha1
モジュールは、WebSocket メッセージの SHA-1 ハッシュを簡単に計算するために使用できるライブラリです。
const WebSocket = require('ws');
const SHA1 = require('ws-sha1');
const ws = new WebSocket.Server({ port: 8080 });
ws.on('connection', function(connection) {
const sha1 = new SHA1();
connection.on('message', function(message) {
sha1.update(message);
});
connection.on('close', function() {
const hash = sha1.digest('hex');
console.log('SHA-1 hash:', hash);
});
});
このコードは、前述の例とほぼ同じですが、ws-sha1
モジュールを使用して SHA-1 ハッシュを計算しています。
カスタムハッシュ関数を使用する
独自のハッシュ関数を作成して、WebSocket メッセージのハッシュを計算することもできます。これは、より複雑なハッシュアルゴリズムを使用したい場合や、独自のハッシュ形式を使用したい場合に役立ちます。
const WebSocket = require('ws');
const ws = new WebSocket.Server({ port: 8080 });
ws.on('connection', function(connection) {
connection.on('message', function(message) {
const hash = customHashFunction(message);
console.log('SHA-1 hash:', hash);
connection.send(hash);
});
});
function customHashFunction(message) {
// 独自のハッシュロジックを実装する
return hash;
}
このコードは、customHashFunction
関数を使用してメッセージのハッシュを計算します。この関数は、独自のハッシュロジックを実装する必要があります。
サードパーティのライブラリを使用する
WebSocket メッセージの SHA-1 ハッシュを計算するために使用できるサードパーティのライブラリが他にもいくつかあります。人気のあるライブラリには、以下のものがあります。
これらのライブラリは、独自の機能と利点を提供している場合がありますので、ニーズに合ったライブラリを選択することが重要です。
使用する方法は、ニーズと要件によって異なります。
- シンプルで使いやすい方法が必要な場合は、
ws-sha1
モジュールを使用するのが良いでしょう。 - より複雑なハッシュアルゴリズムを使用したい場合、または独自のハッシュ形式を使用したい場合は、カスタムハッシュ関数を使用する必要があります。
- 特定の機能や利点を必要とする場合は、サードパーティのライブラリを使用するのが良いでしょう。
javascript node.js websocket