1. 面向开发者的 Web 技术
  2. Web API
  3. SubtleCrypto
  4. SubtleCrypto.generateKey()

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

SubtleCrypto.generateKey()

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2020年1月⁩.

* Some parts of this feature may have varying levels of support.

安全上下文: 此特性仅在一些支持的浏览器安全上下文(HTTPS)中可用。

SubtleCrypto 接口的 generateKey() 方法用于生成新的密钥(用于对称加密算法)或密钥对(用于非对称加密算法)。

语法

js
generateKey(algorithm, extractable, keyUsages)

参数

algorithm

一个对象,用于定义要生成的算法类型,并提供所需的参数。

extractable

一个布尔值,表示生成的密钥是否可被 SubtleCrypto.exportKey()SubtleCrypto.wrapKey() 方法导出。

keyUsages

一个数组,表示生成出来的密钥可被用于做什么,数组元素可能的值有:

返回值

一个 Promise,会兑现为 CryptoKey(用于对称加密算法)或 CryptoKeyPair(用于非对称加密算法)。

异常

当发生以下几种异常时,promise 会被拒绝:

SyntaxError DOMException

当结果是类型为 secretprivate加密密钥,但 keyUsages 参数为空时触发。

SyntaxError DOMException

当结果是加密密钥对,但它的 privateKey.usages 属性为空时触发。

示例

备注:你可以在 Github 上尝试可用的示例

生成 RSA 密钥对

以下代码生成 RSA-OAEP 加密密钥对。在 GitHub 上查看完整代码。

js
let keyPair = await window.crypto.subtle.generateKey(
 {
 name: "RSA-OAEP",
 modulusLength: 4096,
 publicExponent: new Uint8Array([1, 0, 1]),
 hash: "SHA-256",
 },
 true,
 ["encrypt", "decrypt"],
);

生成椭圆曲线密钥对

以下代码生成 ECDSA 签名密钥对。在 GitHub 上查看完整代码。

js
let keyPair = await window.crypto.subtle.generateKey(
 {
 name: "ECDSA",
 namedCurve: "P-384",
 },
 true,
 ["sign", "verify"],
);

生成 HMAC 密钥

以下代码生成 HMAC 签名密钥。在 GitHub 上查看完整代码。

js
let key = await window.crypto.subtle.generateKey(
 {
 name: "HMAC",
 hash: { name: "SHA-512" },
 },
 true,
 ["sign", "verify"],
);

生成 AES 密钥

以下代码生成 AES-GCM 加密密钥。在 GitHub 上查看完整代码。

js
let key = await window.crypto.subtle.generateKey(
 {
 name: "AES-GCM",
 length: 256,
 },
 true,
 ["encrypt", "decrypt"],
);

规范

Specification
Web Cryptography Level 2
# SubtleCrypto-method-generateKey

浏览器兼容性

参见

Help improve MDN

Learn how to contribute

This page was last modified on by MDN contributors.

AltStyle によって変換されたページ (->オリジナル) /