Baseline Widely available *
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.
generateKey(algorithm, extractable, keyUsages)
Parameter
algorithm
Ein Objekt, das den Typ des zu generierenden Schlüssels definiert und zusätzliche, algorithmusspezifische Parameter bereitstellt.
RsaHashedKeyGenParams
-Objekt.EcKeyGenParams
-Objekt.HmacKeyGenParams
-Objekt.AesKeyGenParams
-Objekt.Ed25519
oder ein Objekt in der Form { name: "Ed25519" }
.X25519
oder ein Objekt in der Form { name: "X25519" }
.Ein boolescher Wert, der angibt, ob es möglich sein wird, den Schlüssel mit SubtleCrypto.exportKey()
oder SubtleCrypto.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.
Ein Promise
, das mit einem CryptoKey
(für symmetrische Algorithmen) oder einem CryptoKeyPair
(für öffentliche Schlüsselalgorithmen) erfüllt wird.
Das Promise wird abgelehnt, wenn die folgende Ausnahme auftritt:
SyntaxError
DOMException
Wird ausgelöst, wenn das Ergebnis ein CryptoKey
vom Typ secret
oder private
ist, aber keyUsages
leer oder ungültig für den Algorithmustyp ist.
SyntaxError
DOMException
Wird ausgelöst, wenn das Ergebnis ein CryptoKeyPair
ist und sein Attribut privateKey.usages
leer oder ungültig für den Algorithmustyp ist.
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.
<input id="run-button" type="button" value="Run" />
<pre id="log">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 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üsselsDieser 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.
<input id="run-button" type="button" value="Run" />
<pre id="log">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 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 Browser-Kompatibilität Siehe auchRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4