SubtleCrypto.digest()
安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。
SubtleCrypto
インターフェースの digest()
メソッドは、指定されたデータの ダイジェスト を返します。ダイジェストとは、可変長の入力に由来する固定長の短い値です。暗号的ダイジェスト値は耐衝突性を示すため、同じダイジェスト値を持つ 2 つの異なる入力を見つけるのは非常に困難です。
引数として、使用するダイジェストアルゴリズムの識別子とダイジェスト値の元となるデータを受け取ります。ダイジェスト値で解決される Promise
を返します。
構文
const digest = crypto.subtle.digest(algorithm, data);
引数
algorithm
は、使用するダイジェストアルゴリズムを定義するDOMString
です。サポートされる値は次のとおりです:SHA-1
(暗号化アプリケーションではこれを使用しないでください)SHA-256
SHA-384
SHA-512
data
は、ダイジェスト値の元となるデータを含むArrayBuffer
もしくはArrayBufferView
(en-US) です。
返値
digest
はPromise
であり、ダイジェスト値を含む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() (en-US) を使用する必要があります。
例
基本的な例
この例では、メッセージをエンコードし、 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); // (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;
}
const digestHex = await digestMessage(text);
console.log(digestHex);
仕様書
Specification |
---|
Web Cryptography API # SubtleCrypto-method-digest |
ブラウザーの互換性
BCD tables only load in the browser
メモ: Chrome 60 では、 TLS 接続でない場合に crypto.subtle を無効化する機能が追加されました。
関連情報
- Chromium secure origins specification
- FIPS 180-4 SHA 系のダイジェストアルゴリズムを定義しています。