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.
SubtleCrypto
接口的 generateKey()
方法用于生成新的密钥(用于对称加密算法)或密钥对(用于非对称加密算法)。
语法
generateKey(algorithm, extractable, keyUsages)
参数
algorithm
-
一个对象,用于定义要生成的算法类型,并提供所需的参数。
- 对于 RSASSA-PKCS1-v1_5、RSA-PSS 或 RSA-OAEP 算法:传递
RsaHashedKeyGenParams
对象。 - 对于 ECDSA 或 ECDH 算法:传递
EcKeyGenParams
对象。 - 对于 HMAC 算法:传递
HmacKeyGenParams
对象。 - 对于 AES-CTR、AES-CBC、AES-GCM 或 AES-KW 算法:传递
AesKeyGenParams
对象。
- 对于 RSASSA-PKCS1-v1_5、RSA-PSS 或 RSA-OAEP 算法:传递
extractable
-
一个布尔值,表示生成的密钥是否可被
SubtleCrypto.exportKey()
和SubtleCrypto.wrapKey()
方法导出。 keyUsages
-
一个数组,表示生成出来的密钥可被用于做什么,数组元素可能的值有:
返回值
一个 Promise
,会兑现为 CryptoKey
(用于对称加密算法)或 CryptoKeyPair
(用于非对称加密算法)。
异常
当发生以下几种异常时,promise 会被拒绝:
SyntaxError
DOMException
-
当结果是类型为
secret
或private
的加密密钥,但keyUsages
参数为空时触发。 SyntaxError
DOMException
-
当结果是加密密钥对,但它的
privateKey.usages
属性为空时触发。
示例
备注: 你可以在 Github 上尝试可用的示例。
生成 RSA 密钥对
以下代码生成 RSA-OAEP 加密密钥对。在 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"],
);
生成椭圆曲线密钥对
以下代码生成 ECDSA 签名密钥对。在 GitHub 上查看完整代码。
let keyPair = await window.crypto.subtle.generateKey(
{
name: "ECDSA",
namedCurve: "P-384",
},
true,
["sign", "verify"],
);
生成 HMAC 密钥
以下代码生成 HMAC 签名密钥。在 GitHub 上查看完整代码。
let key = await window.crypto.subtle.generateKey(
{
name: "HMAC",
hash: { name: "SHA-512" },
},
true,
["sign", "verify"],
);
生成 AES 密钥
以下代码生成 AES-GCM 加密密钥。在 GitHub 上查看完整代码。
let key = await window.crypto.subtle.generateKey(
{
name: "AES-GCM",
length: 256,
},
true,
["encrypt", "decrypt"],
);
规范
Specification |
---|
Web Cryptography API # SubtleCrypto-method-generateKey |
浏览器兼容性
BCD tables only load in the browser