安全上下文
此特征只可用于
安全上下文
(HTTPS),在某些或所有
支持浏览器
.
digest()
方法在
SubtleCrypto
interface generates a
digest
of the given data. A digest is a short fixed-length value derived from some variable-length input. Cryptographic digests should exhibit collision-resistance, meaning that it's hard to come up with two different inputs that have the same digest value.
It takes as its arguments an identifier for the digest algorithm to use and the data to digest. It returns a
Promise
which will be fulfilled with the digest.
const digest = crypto.subtle.digest(algorithm, data);
algorithm
是
DOMString
defining the hash function to use. Supported values are:
SHA-1
(but don't use this in cryptographic applications)
SHA-256
SHA-384
SHA-512
.
data
是
ArrayBuffer
or
ArrayBufferView
containing the data to be digested.
digest
是
Promise
that fulfills with an
ArrayBuffer
containing the digest.
Digest algorithms, also known as cryptographic hash functions , transform an arbitrarily large block of data into a fixed-size output, usually much shorter than the input. They have a variety of applications in cryptography.
This algorithm is specified in FIPS 180-4 , section 6.1, and produces an output 160 bits long.
警告 : This algorithm is now considered vulnerable and should not be used for cryptographic applications.
This algorithm is specified in FIPS 180-4 , section 6.2, and produces an output 256 bits long.
This algorithm is specified in FIPS 180-4 , section 6.5, and produces an output 384 bits long.
This algorithm is specified in FIPS 180-4 , section 6.4, and produces an output 512 bits long.
Hint: If you are looking here for how to create an keyed-hash message authentication code ( HMAC ), you need to use the SubtleCrypto.sign() 代替。
This example encodes a message, then calculates its SHA-256 digest and logs the digest length:
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);
The digest is returned as an
ArrayBuffer
, but for comparison and display digests are often represented as hex strings. This example calculates a digest, then converts the
ArrayBuffer
to a hex string:
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
The definition of 'SubtleCrypto.digest()' in that specification. |
推荐 | 初始定义。 |
| 桌面 | 移动 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
digest
|
Chrome 37 |
Edge
部分支持
12
|
Firefox
34
|
IE
部分支持
11
|
Opera 24 | Safari 7 | WebView Android 37 | Chrome Android 37 |
Firefox Android
34
|
Opera Android 24 | Safari iOS 7 | Samsung Internet Android 6.0 |
完整支持
部分支持
见实现注意事项。
用户必须明确启用此特征。
In Chrome 60, they added a feature that disables crypto.subtle for non-TLS connections.
SubtleCrypto