SubtleCrypto.digest()

This translation is incomplete. この記事の翻訳にご協力ください

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 です。

返り値

  • digest は、ダイジェスト値を含む ArrayBuffer で解決される Promise です。

サポートされるアルゴリズム

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

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() の定義
勧告 初回定義

ブラウザの互換性

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
digestChrome 完全対応 37Edge 部分対応 12
補足
部分対応 12
補足
補足 Not supported: SHA-1.
Firefox 完全対応 34
完全対応 34
未対応 32 — 34
無効
無効 From version 32 until version 34 (exclusive): this feature is behind the dom.webcrypto.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.
IE 部分対応 11
補足
部分対応 11
補足
補足 Returns CryptoOperation instead of Promise
Opera 完全対応 24Safari 完全対応 7WebView Android 完全対応 37Chrome Android 完全対応 37Firefox Android 完全対応 34
完全対応 34
未対応 32 — 34
無効
無効 From version 32 until version 34 (exclusive): this feature is behind the dom.webcrypto.enabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.
Opera Android 完全対応 24Safari iOS 完全対応 7Samsung Internet Android 完全対応 6.0

凡例

完全対応  
完全対応
部分対応  
部分対応
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連情報

  • FIPS 180-4 specifies the SHA family of digest algorithms.