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 はストリーミング入力に対応していないことに注意してください。入力全体をメモリーに読み込んでから、ダイジェスト関数に渡す必要があります。
構文
digest(algorithm, data)
引数
algorithm
-
文字列で、使用するダイジェストアルゴリズムを定義します。対応している値は次のとおりです。
"SHA-1"
(暗号化アプリケーションでは使用しないでください)"SHA-256"
"SHA-384"
"SHA-512"
.
data
-
ArrayBuffer
、TypedArray
、DataView
のいずれかのオブジェクトで、ダイジェスト値の元となるデータが入ります。
返値
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 ダイジェスト値を計算して、ダイジェスト長を記録します。
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 進文字列に変換します。
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
関連情報
- SubtleCrypto の暗号以外の使用法
- Chromium secure origins specification
- FIPS 180-4 SHA 系のダイジェストアルゴリズムを定義しています。