SubtleCrypto.digest()

安全なコンテキスト用
この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

SubtleCrypto インターフェースの digest() メソッドは、指定されたデータの digest を返します。ダイジェストとは、可変長の入力に由来する固定長の短い値です。暗号的ダイジェスト値は耐衝突性を示すため、同じダイジェスト値を持つ2つの異なる入力を見つけるのは非常に困難です。

引数として、使用するダイジェストアルゴリズムの識別子とダイジェスト値の元となるデータを受け取ります。ダイジェスト値で解決される Promise を返します。

構文

const digest = crypto.subtle.digest(algorithm, data);

引数

  • algorithm は、使用するダイジェストアルゴリズムを定義する DOMString です。サポートされる値は次のとおりです:
    • SHA-1 (暗号化アプリケーションではこれを使用しないでください)
    • SHA-256
    • SHA-384
    • SHA-512
  • data は、ダイジェスト値の元となるデータを含む ArrayBuffer もしくは ArrayBufferView です。

返値

  • digestPromise であり、ダイジェスト値を含む ArrayBuffer で解決されます。

対応しているアルゴリズム

ダイジェストアルゴリズムは 暗号ハッシュ関数 とも呼ばれ、任意の大きなデータブロックを固定サイズの出力 (通常は入力よりもはるかに短い出力) に変換します。暗号化にはさまざまな用途があります。

SHA-1

このアルゴリズムは FIPS 180-4, section 6.1 で定義されており、160 bit 長の出力を生成します。

警告: このアルゴリズムは現在脆弱であると見なされているため、暗号化アプリケーションには使用しないでください。

SHA-256

このアルゴリズムは FIPS 180-4, section 6.2 で定義されており、256 bit 長の出力を生成します。

SHA-384

このアルゴリズムは FIPS 180-4, section 6.5 で定義されており、384 bit 長の出力を生成します。

SHA-512

このアルゴリズムは FIPS 180-4, section 6.4 で定義されており、512 bit 長の出力を生成します。

ヒント: キー付きハッシュメッセージ認証コード (HMAC), の作成方法をここで探している場合は、代わりに SubtleCrypto.sign() を使用する必要があります。

基本的な例

この例では、メッセージをエンコードし、 SHA-256 ダイジェスト値を計算して、ダイジェスト長を記録します:

const text = 'An obscure body in the S-K System, your majesty. The inhabitants refer to it as the planet Earth.';

async function digestMessage(message) {
  const encoder = new TextEncoder();
  const data = encoder.encode(message);
  const hash = await crypto.subtle.digest('SHA-256', data);
  return hash;
}

const digestBuffer = await digestMessage(text);
console.log(digestBuffer.byteLength);

ダイジェスト値を16進文字列に変換する

ダイジェストはArrayBufferとして返されますが、比較および表示のために、ダイジェスト値は多くの場合16進文字列として表されます。 この例では、ダイジェストを計算し、ArrayBufferを16進文字列に変換します:

const text = 'An obscure body in the S-K System, your majesty. The inhabitants refer to it as the planet Earth.';

async function digestMessage(message) {
  const msgUint8 = new TextEncoder().encode(message);                           // encode as (utf-8) Uint8Array
  const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);           // hash the message
  const hashArray = Array.from(new Uint8Array(hashBuffer));                     // convert buffer to byte array
  const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string
  return hashHex;
}

const digestHex = await digestMessage(text);
console.log(digestHex);

仕様書

仕様書 状態 備考
Web Cryptography API
SubtleCrypto.digest() の定義
勧告 初回定義

ブラウザーの互換性

BCD tables only load in the browser

Chrome 60 では、 TLS 接続出ない場合に crypto.subtle を無効化する機能が追加されました。

関連情報