SubtleCrypto: digest() Methode
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Januar 2020.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die digest() Methode der SubtleCrypto Schnittstelle erzeugt einen Digest der angegebenen Daten unter Verwendung der spezifizierten Hash-Funktion.
Ein Digest ist ein kurzer, fester Wert, der aus einem variablen Eingangswert abgeleitet wird.
Kryptografische Digests sollten kollisionsresistent sein, was bedeutet, dass es schwierig ist, zwei verschiedene Eingaben zu finden, die denselben Digest-Wert haben.
Die Methode nimmt als Argumente einen Identifikator für den zu verwendenden Digest-Algorithmus und die zu verdauenden Daten entgegen.
Sie gibt ein Promise zurück, das mit dem Digest erfüllt wird.
Beachten Sie, dass diese API keinen Streaming-Eingang unterstützt: Sie müssen die gesamte Eingabe in den Speicher einlesen, bevor Sie sie in die Digest-Funktion übergeben.
Syntax
digest(algorithm, data)
Parameter
algorithm-
Dies kann ein String oder ein Objekt mit einer einzigen Eigenschaft
namesein, die ein String ist. Der String benennt die zu verwendende Hash-Funktion. Unterstützte Werte sind:"SHA-1"(aber verwenden Sie dies nicht in kryptografischen Anwendungen)"SHA-256""SHA-384""SHA-512".
data-
Ein
ArrayBuffer, einTypedArrayoder einDataViewObjekt, das die zu verdauenden Daten enthält.
Rückgabewert
Ein Promise, das mit einem ArrayBuffer erfüllt wird, der den Digest enthält.
Unterstützte Algorithmen
Digest-Algorithmen, auch bekannt als Hash-Funktionen, transformieren einen beliebig großen Datenblock in eine feste Ausgabemenge, die in der Regel viel kürzer ist als die Eingabe. Sie haben verschiedene Anwendungen in der Kryptografie.
| Algorithmus | Ausgabelänge (Bits) | Blockgröße (Bits) | Spezifikation |
|---|---|---|---|
| SHA-1 | 160 | 512 | FIPS 180-4, Abschnitt 6.1 |
| SHA-256 | 256 | 512 | FIPS 180-4, Abschnitt 6.2 |
| SHA-384 | 384 | 1024 | FIPS 180-4, Abschnitt 6.5 |
| SHA-512 | 512 | 1024 | FIPS 180-4, Abschnitt 6.4 |
Warnung: SHA-1 wird nun als anfällig angesehen und sollte nicht für kryptografische Anwendungen verwendet werden.
Hinweis: Wenn Sie hier nach einer Methode suchen, um einen keyed-hash Nachrichtenauthentifizierungscode (HMAC) zu erstellen, sollten Sie stattdessen SubtleCrypto.sign() verwenden.
Beispiele
Für weitere Beispiele zur Verwendung der digest() API siehe Nicht-kryptografische Anwendungen von SubtleCrypto.
Einfaches Beispiel
Dieses Beispiel kodiert eine Nachricht, berechnet dann deren SHA-256 Digest und protokolliert die Digest-Länge:
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 window.crypto.subtle.digest("SHA-256", data);
return hash;
}
digestMessage(text).then((digestBuffer) =>
console.log(digestBuffer.byteLength),
);
Konvertieren eines Digests in einen Hex-String
Der Digest wird als ArrayBuffer zurückgegeben, aber für den Vergleich und die Darstellung werden Digests oft als Hex-Strings repräsentiert.
Dieses Beispiel berechnet einen Digest und konvertiert dann den ArrayBuffer in einen 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 window.crypto.subtle.digest("SHA-256", msgUint8); // hash the message
const hashHex = new Uint8Array(hashBuffer).toHex(); // Convert ArrayBuffer to hex string.
return hashHex;
}
digestMessage(text).then((digestHex) => console.log(digestHex));
Das obige Beispiel verwendet Uint8Array.fromHex(), das ab 2025 verfügbar ist.
Um ältere Browser zu unterstützen, kann stattdessen das folgende alternative Beispiel verwendet werden:
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 window.crypto.subtle.digest("SHA-256", msgUint8); // hash the message
if (Uint8Array.prototype.toHex) {
// Use toHex if supported.
return new Uint8Array(hashBuffer).toHex(); // Convert ArrayBuffer to hex string.
}
// If toHex() is not supported, fall back to an alternative implementation.
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;
}
digestMessage(text).then((digestHex) => console.log(digestHex));
Spezifikationen
| Specification |
|---|
| Web Cryptography Level 2> # SubtleCrypto-method-digest> |
Browser-Kompatibilität
Loading…
Siehe auch
- Nicht-kryptografische Anwendungen von SubtleCrypto
- Chromium-Spezifikation für sichere Ursprünge
- FIPS 180-4 spezifiziert die SHA-Familie von Digest-Algorithmen.
Uint8Array.toHex()