SubtleCrypto: digest() メソッド

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

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

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

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

この API はストリーミング入力に対応していないことに注意してください。入力全体をメモリーに読み込んでから、ダイジェスト関数に渡す必要があります。

構文

js
digest(algorithm, data)

引数

algorithm

文字列で、使用するダイジェストアルゴリズムを定義します。対応している値は次のとおりです。

  • "SHA-1"(暗号化アプリケーションでは使用しないでください)
  • "SHA-256"
  • "SHA-384"
  • "SHA-512".
data

ArrayBufferTypedArrayDataView のいずれかのオブジェクトで、ダイジェスト値の元となるデータが入ります。

返値

Promise で、ダイジェスト値を含む ArrayBuffer で履行されます。

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

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

アルゴリズム 出力長(ビット数) ブロックサイズ(ビット数) 仕様書
SHA-1 160 512 FIPS 180-4, section 6.1
SHA-256 256 512 FIPS 180-4, section 6.2
SHA-384 384 1024 FIPS 180-4, section 6.5
SHA-512 512 1024 FIPS 180-4, section 6.4

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

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

基本的な例

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

js
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;
}

digestMessage(text).then((digestBuffer) =>
  console.log(digestBuffer.byteLength),
);

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

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

js
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); // (utf-8 の) Uint8Array にエンコードする
  const hashBuffer = await crypto.subtle.digest("SHA-256", msgUint8); // メッセージをハッシュする
  const hashArray = Array.from(new Uint8Array(hashBuffer)); // バッファーをバイト列に変換する
  const hashHex = hashArray
    .map((b) => b.toString(16).padStart(2, "0"))
    .join(""); // バイト列を 16 進文字列に変換する
  return hashHex;
}

digestMessage(text).then((digestHex) => console.log(digestHex));

仕様書

Specification
Web Cryptography API
# SubtleCrypto-method-digest

ブラウザーの互換性

BCD tables only load in the browser

関連情報