此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
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.
SubtleCrypto 接口的generateKey() 方法用于生成新的密钥(用于对称加密算法)或密钥对(用于非对称加密算法)。
In this article
语法
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 会被拒绝:
SyntaxErrorDOMException当结果是类型为
secret或private的加密密钥,但keyUsages参数为空时触发。SyntaxErrorDOMException当结果是加密密钥对,但它的
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 Level 2> # SubtleCrypto-method-generateKey> |