Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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 angegebenen Hash-Funktion. Ein Digest ist ein kurzer, festlängiger Wert, der aus einem variabellängigen Input abgeleitet wird. Kryptografische Digests sollten Kollisionsresistenz aufweisen, was bedeutet, dass es schwierig sein sollte, zwei verschiedene Eingaben zu finden, die denselben Digest-Wert haben.

Die Methode benötigt als Argumente einen Bezeichner für den zu verwendenden Digest-Algorithmus und die zu verarbeitenden Daten. Sie gibt ein Promise zurück, welches mit dem Digest erfüllt wird.

Beachten Sie, dass diese API keinen Streaming-Input unterstützt: Sie müssen den gesamten Input in den Speicher lesen, bevor Sie ihn der Digest-Funktion übergeben.

Syntax

js
digest(algorithm, data)

Parameter

algorithm

Dies kann ein String oder ein Objekt mit einer einzigen Eigenschaft name sein, 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, ein TypedArray oder ein DataView-Objekt, das die zu verarbeitenden 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 Ausgabegröße, die normalerweise viel kürzer ist als der Input. Sie haben verschiedene Anwendungen in der Kryptografie.

Algorithmus Länge der Ausgabe (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 gilt inzwischen als anfällig und sollte nicht für kryptografische Anwendungen verwendet werden.

Hinweis: Wenn Sie hier nach einer Anleitung zur Erstellung eines Keyed-Hash-Message-Authentication-Codes (HMAC) suchen, müssen Sie stattdessen SubtleCrypto.sign() verwenden.

Beispiele

Für weitere Beispiele zur Verwendung der digest()-API siehe Nicht-kryptografische Verwendungen von SubtleCrypto.

Einfaches Beispiel

Dieses Beispiel kodiert eine Nachricht, berechnet dann deren SHA-256-Digest und protokolliert die Digest-Länge:

js
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),
);

Konvertierung eines Digests in einen Hex-String

Der Digest wird als ArrayBuffer zurückgegeben, aber zur Vergleichs- und Anzeigezwecken werden Digests häufig als Hex-Strings dargestellt. Dieses Beispiel berechnet einen Digest und konvertiert dann den ArrayBuffer in einen Hex-String:

js
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.toHex(), das 2025 verfügbar wurde. Um ältere Browser zu unterstützen, kann stattdessen die folgende Alternative verwendet werden:

js
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

Siehe auch