JavaScriptでSHA-256ハッシュを生成する方法【ハッシュ関数】

JavaScriptでは様々な方法でSHA-256ハッシュを生成することができます。

この記事では『JavaScriptでSHA-256ハッシュを生成する方法』について、

  • Web Crypto APIを使用した方法
  • Node.jsのcryptoモジュールを使用した方法
  • crypto-jsライブラリを使用した方法

をプログラム例を用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。

Web Crypto APIを使用して、SHA-256ハッシュを生成する

JavaScriptにおいてSHA-256ハッシュを生成するための方法の一つは、Web Crypto APIを使用することです。

以下にWeb Crypto APIを使用して、SHA-256ハッシュを生成するプログラム例を示しています。

// sha256関数は非同期関数(asyncを使用)で、引数としてメッセージ(ハッシュを計算する文字列)を受け取る
async function sha256(message) {
  // 文字列をUint8Arrayにエンコードする
  const encoder = new TextEncoder();
  const msgUint8 = encoder.encode(message);

  // エンコードされたメッセージのSHA-256ハッシュを計算する
  // ここでWeb Crypto APIを使用している
  const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);

  // SHA-256ハッシュの計算結果(hashBuffer)はArrayBufferなので、
  // それをUint8Arrayに変換し、16進数の文字列に変換する
  const hashArray = Array.from(new Uint8Array(hashBuffer));
  const hashHex = hashArray
    .map((b) => b.toString(16).padStart(2, '0'))
    .join('');

  // SHA-256ハッシュの16進数の文字列を返す
  return hashHex;
}

// 使用例('Hello'をSHA-256でハッシュ値に変換する)
sha256('Hello').then((hash) => {
  console.log(hash); // SHA-256ハッシュをコンソールに表示する
});

上記のプログラム例では、sha256関数呼び出して「Hello」のSHA-256ハッシュを計算し、結果をコンソールに表示しています。

補足

Web Crypto APIはすべてのブラウザでサポートされているわけではないので、使用する前に互換性を確認してください。

Node.jsのcryptoモジュールを使用して、SHA-256ハッシュを生成する

Node.jsのcryptoモジュールに存在するcreateHashメソッドを使用して、SHA-256ハッシュを生成するプログラム例を以下に示します。

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

// sha256関数は同期関数で、引数としてメッセージ(ハッシュを計算する文字列)を受け取る
function sha256(message) {
  // SHA-256ハッシュ計算のためのハッシュオブジェクトを初期化する
  const hash = crypto.createHash('sha256');

  // ハッシュに入力データを供給する
  hash.update(message);

  // 16進数の文字列としてハッシュを完成させる
  const hashHex = hash.digest('hex');

  // SHA-256ハッシュの16進数の文字列を返す
  return hashHex;
}

// 使用例('Hello'をSHA-256でハッシュ値に変換する)
const result = sha256('Hello');
console.log(result); // SHA-256ハッシュをコンソールに表示する

上記のプログラムはNode.js環境においてSHA-256ハッシュを生成する方法としては非常に一般的です。

crypto-jsライブラリを使用して、SHA-256ハッシュを生成する

次に、JavaScriptのcrypto-jsライブラリを使用して、SHA-256ハッシュを生成する方法を説明します。crypto-jsを使用すると非常にシンプルにSHA-256ハッシュを生成することができます。

まず、crypto-jsをインストールする必要があります。npmを使用している場合、次のコマンドでインストールできます。

npm install crypto-js

その後、JavaScriptの暗号化ライブラリ(crypto-js)を使用して、SHA-256ハッシュを生成するプログラムを記述します。

// crypto-jsライブラリをインポートする
const CryptoJS = require('crypto-js');

// ハッシュを計算するメッセージを定義する
const message = 'Hello';

// CryptoJS.SHA256メソッドを使用して、メッセージのSHA-256ハッシュを計算する
const hash = CryptoJS.SHA256(message);

// ハッシュを16進数の文字列に変換する
const result = hash.toString(CryptoJS.enc.Hex);

// SHA-256ハッシュをコンソールに表示する
console.log(result);

補足

hash.toString(CryptoJS.enc.Hex)hash.toString()は同じ結果を返します。これは、デフォルトのエンコーディングが16進数であるからです。

CryptoJS.enc.Hexはエンコーディングを16進数にするオプションです。CryptoJS.enc.Hexを明示的に使用する必要はありませんが、このようなエンコーディングのオプションを提供することで、他のエンコーディング形式を選択することが可能となります。例えば、CryptoJS.enc.Base64toStringメソッドに渡すことで、Base64形式での出力を得ることができます。

本記事のまとめ

この記事では『JavaScriptでSHA-256ハッシュを生成する方法』について、以下の内容を説明しました。

  • Web Crypto APIを使用した方法
  • Node.jsのcryptoモジュールを使用した方法
  • crypto-jsライブラリを使用した方法

お読み頂きありがとうございました。