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 July 2015.

* 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 API
# SubtleCrypto-method-generateKey

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
generateKey
Ed25519 algorithm
X25519 algorithm

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
In development. Supported in a pre-release version.
In development. Supported in a pre-release version.
No support
No support
See implementation notes.
User must explicitly enable this feature.
Has more compatibility info.

参见