Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
SubtleCrypto: generateKey() 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.
* Some parts of this feature may have varying levels of support.
Sicherer Kontext: Diese Funktion ist nur insicheren Kontexten (HTTPS) in einigen oder allenunterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist inWeb Workers verfügbar.
DiegenerateKey()-Methode derSubtleCrypto-Schnittstelle wird verwendet, um einen neuen Schlüssel (für symmetrische Algorithmen) oder ein Schlüsselpaar (für öffentliche Schlüsselalgorithmen) zu generieren.
In diesem Artikel
Syntax
generateKey(algorithm, extractable, keyUsages)Parameter
algorithmEin Objekt, das den Typ des zu generierenden Schlüssels definiert und zusätzliche, algorithmusspezifische Parameter bereitstellt.
- FürRSASSA-PKCS1-v1_5,RSA-PSS,oderRSA-OAEP:übergeben Sie ein
RsaHashedKeyGenParams-Objekt. - FürECDSA oderECDH:übergeben Sie ein
EcKeyGenParams-Objekt. - FürHMAC: übergeben Sie ein
HmacKeyGenParams-Objekt. - FürAES-CTR,AES-CBC,AES-GCM, oderAES-KW:übergeben Sie ein
AesKeyGenParams-Objekt. - FürEd25519: übergeben Sie den String
Ed25519oder ein Objekt in der Form{ name: "Ed25519" }. - FürX25519: übergeben Sie den String
X25519oder ein Objekt in der Form{ name: "X25519" }.
- FürRSASSA-PKCS1-v1_5,RSA-PSS,oderRSA-OAEP:übergeben Sie ein
extractableEin boolescher Wert, der angibt, ob es möglich sein wird, den Schlüssel mit
SubtleCrypto.exportKey()oderSubtleCrypto.wrapKey()zu exportieren.keyUsagesEin
Arrayvon Strings, die angeben, was mit dem neu generierten Schlüssel gemacht werden kann.Mögliche Werte für Array-Elemente sind:encryptDer Schlüssel kann verwendet werden, um Nachrichten zuverschlüsseln.
decryptDer Schlüssel kann verwendet werden, um Nachrichten zuentschlüsseln.
signDer Schlüssel kann verwendet werden, um Nachrichten zusignieren.
verifyDer Schlüssel kann verwendet werden, um Signaturen zuverifizieren.
deriveKeyDer Schlüssel kann verwendet werden, umeinen neuen Schlüssel abzuleiten.
deriveBitsDer Schlüssel kann verwendet werden, umBits abzuleiten.
wrapKeyDer Schlüssel kann verwendet werden, umeinen Schlüssel zu verpacken.
unwrapKeyDer Schlüssel kann verwendet werden, umeinen Schlüssel zu entpacken.
Rückgabewert
EinPromise, das mit einemCryptoKey (für symmetrische Algorithmen) oder einemCryptoKeyPair (für öffentliche Schlüsselalgorithmen) erfüllt wird.
Ausnahmen
Das Promise wird abgelehnt, wenn die folgende Ausnahme auftritt:
SyntaxErrorDOMExceptionWird ausgelöst, wenn das Ergebnis ein
CryptoKeyvom Typsecretoderprivateist, aberkeyUsagesleer oder ungültig für den Algorithmustyp ist.SyntaxErrorDOMExceptionWird ausgelöst, wenn das Ergebnis ein
CryptoKeyPairist und sein AttributprivateKey.usagesleer oder ungültig für den Algorithmustyp ist.
Beispiele
Hinweis:Sie können diefunktionierenden Beispiele auf GitHub ausprobieren.
Erzeugung eines RSA-Schlüsselpaares
Dieser Code generiert ein RSA-OAEP-Verschlüsselungsschlüsselpaar.Sehen Sie den vollständigen Code auf GitHub.
let keyPair = await window.crypto.subtle.generateKey( { name: "RSA-OAEP", modulusLength: 4096, publicExponent: new Uint8Array([1, 0, 1]), hash: "SHA-256", }, true, ["encrypt", "decrypt"],);Erzeugung eines elliptischen Kurven-Schlüsselpaares
Dieser Code generiert ein ECDSA-Signierschlüsselpaar.Sehen Sie den vollständigen Code auf GitHub.
let keyPair = await window.crypto.subtle.generateKey( { name: "ECDSA", namedCurve: "P-384", }, true, ["sign", "verify"],);Erzeugung eines HMAC-Schlüssels
Dieser Code generiert einen HMAC-Signierschlüssel.Sehen Sie den vollständigen Code auf GitHub.
let key = await window.crypto.subtle.generateKey( { name: "HMAC", hash: { name: "SHA-512" }, }, true, ["sign", "verify"],);Erzeugung eines AES-Schlüssels
Dieser Code generiert einen AES-GCM-Verschlüsselungsschlüssel.Sehen Sie den vollständigen Code auf GitHub.
let key = await window.crypto.subtle.generateKey( { name: "AES-GCM", length: 256, }, true, ["encrypt", "decrypt"],);Erzeugung eines Ed25519-Schlüssels
Dieser Code generiert ein Ed25519-Signierschlüsselpaar.Er basiert aufdiesem Quellcode auf GitHub, den Siehier live ausführen können.
<input type="button" value="Run" /><pre>Click "Run" button</pre>#log { height: 170px; white-space: pre-wrap; /* wrap pre blocks */ overflow-wrap: break-word; /* break on words */ overflow-y: auto; padding: 0.5rem; border: 1px solid black;}const logElement = document.querySelector("#log");function log(text) { logElement.innerText = `${logElement.innerText}${text}\n`; logElement.scrollTop = logElement.scrollHeight;}JavaScript
Der Code zur Erzeugung eines Schlüsselpaares mit demEd25519-Algorithmus und Ausgabe der Informationen in jedem Schlüssel wird unten gezeigt.Beachten Sie, dass der Code in einemtry..catch-Block ausgeführt wird, da nicht alle Browser diesen Algorithmus unterstützen.
Im JavaScript wird zunächst das#sign-button und#message<input>-Element abgerufen, dann wird ein Listener für dasclick-Ereignis auf dem Button hinzugefügt.Der Ereignishandler leert das Log und führt die anderen Operationen aus, indem der Inhalt des<input>-Elements übergeben wird.
const button = document.querySelector("#run-button");const input = document.querySelector("#log");button.addEventListener("click", () => { // Clear log logElement.innerText = ""; logElement.scrollTop = logElement.scrollHeight; // Run test test();});async function test() { try { // Create a key pair and use destructuring assignment to assign to variables const { publicKey, privateKey } = await crypto.subtle.generateKey( { name: "Ed25519", }, true, ["sign", "verify"], ); // Log the properties of the keys log(`publicKey: ${publicKey}`); log(` type: ${publicKey.type}`); log(` extractable: ${publicKey.extractable}`); log(` algorithm: ${JSON.stringify(publicKey.algorithm)}`); log(` usages: ${publicKey.usages}`); log(`privateKey: ${privateKey}`); log(` type: ${privateKey.type}`); log(` extractable: ${privateKey.extractable}`); log(` algorithm: ${JSON.stringify(privateKey.algorithm)}`); log(` usages: ${privateKey.usages}`); } catch (error) { log(error); }}Ergebnis
Die Informationen über die erstellten Schlüssel werden unten protokolliert (oder ein Fehler-String, wenn der Browser die Erstellung des Schlüssels nicht zulässt).
Erzeugung eines X25519-Schlüssels
Dieser Code generiert ein X25519-Öffentliches und privates Schlüsselpaar, das inSubtleCrypto.deriveKey() zur Erstellung eines gemeinsamen Schlüssels oder inSubtleCrypto.deriveBits() zur Erstellung eines gemeinsamen Geheimnisses verwendet werden kann.
<input type="button" value="Run" /><pre>Click "Run" button</pre>#log { height: 170px; white-space: pre-wrap; /* wrap pre blocks */ overflow-wrap: break-word; /* break on words */ overflow-y: auto; padding: 0.5rem; border: 1px solid black;}const logElement = document.querySelector("#log");function log(text) { logElement.innerText = `${logElement.innerText}${text}\n`; logElement.scrollTop = logElement.scrollHeight;}JavaScript
Der Code zur Erzeugung eines Schlüsselpaares mit demX25519-Algorithmus und Ausgabe der Informationen in jedem Schlüssel wird unten gezeigt.Beachten Sie, dass der Code in einemtry..catch-Block ausgeführt wird, da nicht alle Browser diesen Algorithmus unterstützen.
Im JavaScript wird zunächst das#run-button und#log<input>-Element abgerufen, dann wird ein Listener für dasclick-Ereignis auf dem Button hinzugefügt.Der Ereignishandler leert das Log, generiert ein X25519-Schlüsselpaar und protokolliert einige seiner Eigenschaften.
const button = document.querySelector("#run-button");const input = document.querySelector("#log");button.addEventListener("click", () => { // Clear log logElement.innerText = ""; logElement.scrollTop = logElement.scrollHeight; // Run test test();});async function test() { try { // Create a key pair and use destructuring assignment to assign to variables const { publicKey, privateKey } = await crypto.subtle.generateKey( { name: "X25519", }, true, ["deriveKey", "deriveBits"], ); // Log the properties of the keys log(`publicKey: ${publicKey}`); log(` type: ${publicKey.type}`); log(` extractable: ${publicKey.extractable}`); log(` algorithm: ${JSON.stringify(publicKey.algorithm)}`); log(` usages: ${publicKey.usages}`); log(`privateKey: ${privateKey}`); log(` type: ${privateKey.type}`); log(` extractable: ${privateKey.extractable}`); log(` algorithm: ${JSON.stringify(privateKey.algorithm)}`); log(` usages: ${privateKey.usages}`); } catch (error) { log(error); }}Ergebnis
Die Informationen über die erstellten Schlüssel werden unten protokolliert (oder ein Fehler-String, wenn der Browser die Erstellung des Schlüssels nicht zulässt).
Spezifikationen
| Specification |
|---|
| Web Cryptography Level 2> # SubtleCrypto-method-generateKey> |