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 January 2020.
* Some parts of this feature may have varying levels of support.
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 generateKey()
-Methode der SubtleCrypto
-Schnittstelle wird verwendet, um einen neuen Schlüssel (für symmetrische Algorithmen) oder ein Schlüsselpaar (für öffentliche Schlüsselalgorithmen) zu generieren.
Syntax
generateKey(algorithm, extractable, keyUsages)
Parameter
algorithm
-
Ein Objekt, das den Typ des zu generierenden Schlüssels definiert und zusätzliche, algorithmusspezifische Parameter bereitstellt.
- Für RSASSA-PKCS1-v1_5, RSA-PSS,
oder RSA-OAEP:
übergeben Sie ein
RsaHashedKeyGenParams
-Objekt. - Für ECDSA oder ECDH:
übergeben Sie ein
EcKeyGenParams
-Objekt. - Für HMAC: übergeben Sie ein
HmacKeyGenParams
-Objekt. - Für AES-CTR, AES-CBC,
AES-GCM, oder AES-KW:
übergeben Sie ein
AesKeyGenParams
-Objekt. - Für Ed25519: übergeben Sie den String
Ed25519
oder ein Objekt in der Form{ name: "Ed25519" }
. - Für X25519: übergeben Sie den String
X25519
oder ein Objekt in der Form{ name: "X25519" }
.
- Für RSASSA-PKCS1-v1_5, RSA-PSS,
oder RSA-OAEP:
übergeben Sie ein
extractable
-
Ein boolescher Wert, der angibt, ob es möglich sein wird, den Schlüssel mit
SubtleCrypto.exportKey()
oderSubtleCrypto.wrapKey()
zu exportieren. keyUsages
-
Ein
Array
von Strings, die angeben, was mit dem neu generierten Schlüssel gemacht werden kann. Mögliche Werte für Array-Elemente sind:encrypt
-
Der Schlüssel kann verwendet werden, um Nachrichten zu verschlüsseln.
decrypt
-
Der Schlüssel kann verwendet werden, um Nachrichten zu entschlüsseln.
sign
-
Der Schlüssel kann verwendet werden, um Nachrichten zu signieren.
verify
-
Der Schlüssel kann verwendet werden, um Signaturen zu verifizieren.
deriveKey
-
Der Schlüssel kann verwendet werden, um einen neuen Schlüssel abzuleiten.
deriveBits
-
Der Schlüssel kann verwendet werden, um Bits abzuleiten.
wrapKey
-
Der Schlüssel kann verwendet werden, um einen Schlüssel zu verpacken.
unwrapKey
-
Der Schlüssel kann verwendet werden, um einen Schlüssel zu entpacken.
Rückgabewert
Ein Promise
, das mit einem CryptoKey
(für symmetrische Algorithmen) oder einem CryptoKeyPair
(für öffentliche Schlüsselalgorithmen) erfüllt wird.
Ausnahmen
Das Promise wird abgelehnt, wenn die folgende Ausnahme auftritt:
SyntaxError
DOMException
-
Wird ausgelöst, wenn das Ergebnis ein
CryptoKey
vom Typsecret
oderprivate
ist, aberkeyUsages
leer oder ungültig für den Algorithmustyp ist. SyntaxError
DOMException
-
Wird ausgelöst, wenn das Ergebnis ein
CryptoKeyPair
ist und sein AttributprivateKey.usages
leer oder ungültig für den Algorithmustyp ist.
Beispiele
Hinweis: Sie können die funktionierenden 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 auf diesem Quellcode auf GitHub, den Sie hier live ausführen können.
JavaScript
Der Code zur Erzeugung eines Schlüsselpaares mit dem Ed25519
-Algorithmus und Ausgabe der Informationen in jedem Schlüssel wird unten gezeigt.
Beachten Sie, dass der Code in einem try..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 das click
-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 in SubtleCrypto.deriveKey()
zur Erstellung eines gemeinsamen Schlüssels oder in SubtleCrypto.deriveBits()
zur Erstellung eines gemeinsamen Geheimnisses verwendet werden kann.
JavaScript
Der Code zur Erzeugung eines Schlüsselpaares mit dem X25519
-Algorithmus und Ausgabe der Informationen in jedem Schlüssel wird unten gezeigt.
Beachten Sie, dass der Code in einem try..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 das click
-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 |