On this page

稳定性:2 - 稳定

Node.js 提供了 Web Crypto API 标准的实现。

使用 globalThis.cryptorequire('node:crypto').webcrypto 来访问此 模块。

const { subtle } = globalThis.crypto;

(async function() {

  const key = await subtle.generateKey({
    name: 'HMAC',
    hash: 'SHA-256',
    length: 256,
  }, true, ['sign', 'verify']);

  const enc = new TextEncoder();
  const message = enc.encode('我爱纸杯蛋糕');

  const digest = await subtle.sign({
    name: 'HMAC',
  }, key, message);

})();

稳定性:1.1 - 积极开发中

Node.js 提供了以下功能的实现,来自 Web 加密 API 中的现代算法 WICG 提案:

算法:

  • 'AES-OCB'1
  • 'Argon2d'2
  • 'Argon2i'2
  • 'Argon2id'2
  • 'ChaCha20-Poly1305'
  • 'cSHAKE128'
  • 'cSHAKE256'
  • 'KMAC128'1
  • 'KMAC256'1
  • 'KT128'
  • 'KT256'
  • 'ML-DSA-44'3
  • 'ML-DSA-65'3
  • 'ML-DSA-87'3
  • 'ML-KEM-512'3
  • 'ML-KEM-768'3
  • 'ML-KEM-1024'3
  • 'SHA3-256'
  • 'SHA3-384'
  • 'SHA3-512'
  • 'TurboSHAKE128'
  • 'TurboSHAKE256'

密钥格式:

  • 'raw-public'
  • 'raw-secret'
  • 'raw-seed'

方法:

稳定性:1.1 - 积极开发中

Node.js 提供了以下功能的实现,来自 Web 加密 API 中的安全曲线 WICG 提案:

算法:

  • 'Ed448'
  • 'X448'
const { subtle } = globalThis.crypto;

async function generateAesKey(length = 256) {
  const key = await subtle.generateKey({
    name: 'AES-CBC',
    length,
  }, true, ['encrypt', 'decrypt']);

  return key;
}

此示例使用 Argon2 从密码派生密钥(如果可用), 否则使用 PBKDF2;然后使用 AES-OCB(如果可用)或 AES-GCM 用它加密和解密一些文本。

const { SubtleCrypto, crypto } = globalThis;

const password = 'correct horse battery staple';
const derivationAlg =
  SubtleCrypto.supports?.('importKey', 'Argon2id') ?
    'Argon2id' :
    'PBKDF2';
const encryptionAlg =
  SubtleCrypto.supports?.('importKey', 'AES-OCB') ?
    'AES-OCB' :
    'AES-GCM';
const passwordKey = await crypto.subtle.importKey(
  derivationAlg === 'Argon2id' ? 'raw-secret' : 'raw',
  new TextEncoder().encode(password),
  derivationAlg,
  false,
  ['deriveKey'],
);
const nonce = crypto.getRandomValues(new Uint8Array(16));
const derivationParams =
  derivationAlg === 'Argon2id' ?
    {
      nonce,
      parallelism: 4,
      memory: 2 ** 21,
      passes: 1,
    } :
    {
      salt: nonce,
      iterations: 100_000,
      hash: 'SHA-256',
    };
const key = await crypto.subtle.deriveKey(
  {
    name: derivationAlg,
    ...derivationParams,
  },
  passwordKey,
  {
    name: encryptionAlg,
    length: 256,
  },
  false,
  ['encrypt', 'decrypt'],
);
const plaintext = 'Hello, world!';
const iv = crypto.getRandomValues(new Uint8Array(12));
const encrypted = await crypto.subtle.encrypt(
  { name: encryptionAlg, iv },
  key,
  new TextEncoder().encode(plaintext),
);
const decrypted = new TextDecoder().decode(await crypto.subtle.decrypt(
  { name: encryptionAlg, iv },
  key,
  encrypted,
));

下表详细列出了 Node.js Web Crypto API 实现所支持的算法,以及每种算法所支持的 API:

算法加密签名和 MAC密钥或位派生密钥包装密钥封装摘要
'AES-CBC'
'AES-CTR'
'AES-GCM'
'AES-KW'
'AES-OCB'
'Argon2d'
'Argon2i'
'Argon2id'
'ChaCha20-Poly1305'4
'cSHAKE128'4
'cSHAKE256'4
'ECDH'
'ECDSA'
'Ed25519'
'Ed448'5
'HKDF'
'HMAC'
'KMAC128'4
'KMAC256'4
'KT128'4
'KT256'4
'ML-DSA-44'4
'ML-DSA-65'4
'ML-DSA-87'4
'ML-KEM-512'4
'ML-KEM-768'4
'ML-KEM-1024'4
'PBKDF2'
'RSA-OAEP'
'RSA-PSS'
'RSASSA-PKCS1-v1_5'
'SHA-1'
'SHA-256'
'SHA-384'
'SHA-512'
'SHA3-256'4
'SHA3-384'4
'SHA3-512'4
'TurboSHAKE128'4
'TurboSHAKE256'4
'X25519'
'X448'5

globalThis.cryptoCrypto 类的一个实例。Crypto 是一个单例,提供对其余 crypto API 的访问。

提供对 SubtleCrypto API 的访问。

生成密码学安全的随机值。给定的 typedArray 将被填充随机值,并返回对 typedArray 的引用。

给定的 typedArray 必须是基于整数的 <TypedArray> 实例,即不接受 Float32ArrayFloat64Array

如果给定的 typedArray 大于 65,536 字节,将抛出错误。

生成一个随机的 RFC 4122 版本 4 UUID。UUID 是使用密码学伪随机数生成器生成的。

一个对象,详细说明密钥可用于哪种算法以及额外的算法特定参数。

只读。

当为 true 时,<CryptoKey> 可以使用 subtle.exportKey()subtle.wrapKey() 导出。

只读。

一个字符串,标识密钥是对称('secret')还是非对称('private''public')密钥。

一个字符串数组,标识密钥可用于哪些操作。

可能的用途包括:

有效的密钥用途取决于密钥算法(由 cryptokey.algorithm.name 标识)。

图例:

支持的密钥算法加密签名和 MAC密钥或位派生密钥包装密钥封装
'AES-CBC'
'AES-CTR'
'AES-GCM'
'AES-KW'
'AES-OCB'
'Argon2d'
'Argon2i'
'Argon2id'
'ChaCha20-Poly1305'4
'ECDH'
'ECDSA'
'Ed25519'
'Ed448'5
'HKDF'
'HMAC'
'KMAC128'4
'KMAC256'4
'ML-DSA-44'4
'ML-DSA-65'4
'ML-DSA-87'4
'ML-KEM-512'4
'ML-KEM-768'4
'ML-KEM-1024'4
'PBKDF2'
'RSA-OAEP'
'RSA-PSS'
'RSASSA-PKCS1-v1_5'
'X25519'
'X448'5

CryptoKeyPair 是一个简单的字典对象,具有 publicKeyprivateKey 属性,表示非对称密钥对。

Attributes
operation:<string>
"encrypt", "decrypt", "sign", "verify", "digest", "generateKey", "deriveKey", "deriveBits", "importKey", "exportKey", "getPublicKey", "wrapKey", "unwrapKey", "encapsulateBits", "encapsulateKey", "decapsulateBits", 或 "decapsulateKey"
algorithm:<string> | <Algorithm>
lengthOrAdditionalAlgorithm:<null> | <number> | <string> | <Algorithm> | <undefined>
取决于操作,这要么被忽略,要么是操作为 "deriveBits" 时的 length 参数值,要么是操作为 "deriveKey" 时要派生的密钥的算法,要么是操作为 "wrapKey" 时在包装前要导出的密钥的算法,要么是操作为 "unwrapKey" 时在解包后要导入的密钥的算法,要么是操作为 "encapsulateKey" 或 "decapsulateKey" 时在封/解封装密钥后要导入的密钥的算法。 默认值: 当操作为 "deriveBits" 时为 null ,否则为 undefined

允许在 Web Crypto API 中进行功能检测, 可用于检测给定的算法标识符 (包括其参数)是否支持给定的操作。

参见 检查运行时算法支持 以了解此方法的示例用法。

Attributes
decapsulationAlgorithm:<string> | <Algorithm>
decapsulationKey:<CryptoKey>

消息接收者使用他们的非对称私钥解密“封装密钥”(密文),从而恢复一个临时对称密钥(表示为 <ArrayBuffer>),然后用于解密消息。

目前支持的算法包括:

  • 'ML-KEM-512'4
  • 'ML-KEM-768'4
  • 'ML-KEM-1024'4
Attributes
decapsulationAlgorithm:<string> | <Algorithm>
decapsulationKey:<CryptoKey>
sharedKeyAlgorithm:<string> | <Algorithm> | <HmacImportParams> | <AesDerivedKeyParams> | <KmacImportParams>
extractable:<boolean>
keyUsages:<string>
[] 参见 [密钥用途][]。

消息接收者使用他们的非对称私钥解密“封装密钥”(密文),从而恢复一个临时对称密钥(表示为 <CryptoKey>),然后用于解密消息。

目前支持的算法包括:

  • 'ML-KEM-512'4
  • 'ML-KEM-768'4
  • 'ML-KEM-1024'4

使用 algorithm 中指定的方法和参数以及 key 提供的密钥材料,此方法尝试解密提供的 data。如果成功,返回的 Promise 将解决为一个包含明文结果的 <ArrayBuffer>

目前支持的算法包括:

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'RSA-OAEP'

使用 algorithm 中指定的方法和参数以及 baseKey 提供的密钥材料,此方法尝试生成 length 位。

当未提供 length 或为 null 时,将生成给定算法的最大位数。这对于 'ECDH''X25519''X448'5 算法是允许的,对于其他算法,length 必须是一个数字。

如果成功,返回的 Promise 将解决为一个包含生成数据的 <ArrayBuffer>

目前支持的算法包括:

  • 'Argon2d'4
  • 'Argon2i'4
  • 'Argon2id'4
  • 'ECDH'
  • 'HKDF'
  • 'PBKDF2'
  • 'X25519'
  • 'X448'5

使用 algorithm 中指定的方法和参数,以及 baseKey 提供的密钥材料,此方法尝试基于 derivedKeyType 中的方法和参数生成一个新的 <CryptoKey>

调用此方法等同于先调用 subtle.deriveBits() 生成原始密钥材料,然后使用 derivedKeyTypeextractablekeyUsages 参数作为输入,将结果传递给 subtle.importKey() 方法。

目前支持的算法包括:

  • 'Argon2d'4
  • 'Argon2i'4
  • 'Argon2id'4
  • 'ECDH'
  • 'HKDF'
  • 'PBKDF2'
  • 'X25519'
  • 'X448'5

使用 algorithm 标识的方法,此方法尝试生成 data 的摘要。如果成功,返回的 Promise 将解决为一个包含计算摘要的 <ArrayBuffer>

如果 algorithm 作为 <string> 提供,它必须是以下之一:

  • 'cSHAKE128'4
  • 'cSHAKE256'4
  • 'KT128'4
  • 'KT256'4
  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4
  • 'TurboSHAKE128'4
  • 'TurboSHAKE256'4

如果 algorithm 作为 <Object> 提供,它必须具有一个 name 属性,其值为上述之一。

Attributes
encapsulationAlgorithm:<string> | <Algorithm>
encapsulationKey:<CryptoKey>

使用消息接收者的非对称公钥加密临时对称密钥。此加密密钥是表示为 {EncapsulatedBits} 的“封装密钥”。

目前支持的算法包括:

  • 'ML-KEM-512'4
  • 'ML-KEM-768'4
  • 'ML-KEM-1024'4
Attributes
encapsulationAlgorithm:<string> | <Algorithm>
encapsulationKey:<CryptoKey>
sharedKeyAlgorithm:<string> | <Algorithm> | <HmacImportParams> | <AesDerivedKeyParams> | <KmacImportParams>
extractable:<boolean>
keyUsages:<string>
[] 参见 [密钥用途][]。

使用消息接收者的非对称公钥加密临时对称密钥。此加密密钥是表示为 {EncapsulatedKey} 的“封装密钥”。

目前支持的算法包括:

  • 'ML-KEM-512'4
  • 'ML-KEM-768'4
  • 'ML-KEM-1024'4

使用 algorithm 指定的方法和参数以及 key 提供的密钥材料,此方法尝试加密 data。如果成功,返回的 Promise 将解决为一个包含加密结果的 <ArrayBuffer>

目前支持的算法包括:

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'RSA-OAEP'

将给定的密钥导出为指定的格式(如果支持)。

如果 <CryptoKey> 不可导出,返回的 Promise 将被拒绝。

format'pkcs8''spki' 且导出成功时,返回的 Promise 将解决为一个包含导出密钥数据的 <ArrayBuffer>

format'jwk' 且导出成功时,返回的 Promise 将解决为一个符合 JSON Web Key 规范的 JavaScript 对象。

支持的密钥算法'spki''pkcs8''jwk''raw''raw-secret''raw-public''raw-seed'
'AES-CBC'
'AES-CTR'
'AES-GCM'
'AES-KW'
'AES-OCB'4
'ChaCha20-Poly1305'4
'ECDH'
'ECDSA'
'Ed25519'
'Ed448'5
'HMAC'
'KMAC128'4
'KMAC256'4
'ML-DSA-44'4
'ML-DSA-65'4
'ML-DSA-87'4
'ML-KEM-512'4
'ML-KEM-768'4
'ML-KEM-1024'4
'RSA-OAEP'
'RSA-PSS'
'RSASSA-PKCS1-v1_5'
Attributes
一个用于派生相应公钥的私钥。
keyUsages:<string>
[] 参见 [密钥用途][]。

从给定的私钥派生公钥。

Attributes
extractable:<boolean>
keyUsages:<string>
[] 参见 [密钥用途][]。

使用 algorithm 中提供的参数,此方法尝试生成新的密钥材料。根据使用的算法,生成单个 <CryptoKey><CryptoKeyPair>

支持的 <CryptoKeyPair>(公钥和私钥)生成算法包括:

  • 'ECDH'
  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'5
  • 'ML-DSA-44'4
  • 'ML-DSA-65'4
  • 'ML-DSA-87'4
  • 'ML-KEM-512'4
  • 'ML-KEM-768'4
  • 'ML-KEM-1024'4
  • 'RSA-OAEP'
  • 'RSA-PSS'
  • 'RSASSA-PKCS1-v1_5'
  • 'X25519'
  • 'X448'5

支持的 <CryptoKey>(密钥)生成算法包括:

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-KW'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'HMAC'
  • 'KMAC128'4
  • 'KMAC256'4
Attributes
Attributes
extractable:<boolean>
keyUsages:<string>
[] 参见 [密钥用途][]。

此方法尝试将提供的 keyData 解释为给定的 format,以使用提供的 algorithmextractablekeyUsages 参数创建 <CryptoKey> 实例。如果导入成功,返回的 Promise 将解决为密钥材料的 <CryptoKey> 表示。

如果导入 KDF 算法密钥,extractable 必须为 false

目前支持的算法包括:

支持的密钥算法'spki''pkcs8''jwk''raw''raw-secret''raw-public''raw-seed'
'AES-CBC'
'AES-CTR'
'AES-GCM'
'AES-KW'
'AES-OCB'4
'Argon2d'4
'Argon2i'4
'Argon2id'4
'ChaCha20-Poly1305'4
'ECDH'
'ECDSA'
'Ed25519'
'Ed448'5
'HKDF'
'HMAC'
'KMAC128'4
'KMAC256'4
'ML-DSA-44'4
'ML-DSA-65'4
'ML-DSA-87'4
'ML-KEM-512'4
'ML-KEM-768'4
'ML-KEM-1024'4
'PBKDF2'
'RSA-OAEP'
'RSA-PSS'
'RSASSA-PKCS1-v1_5'
'X25519'
'X448'5

使用 algorithm 给出的方法和参数以及 key 提供的密钥材料,此方法尝试生成 data 的密码学签名。如果成功,返回的 Promise 将解决为一个包含生成签名的 <ArrayBuffer>

目前支持的算法包括:

  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'5
  • 'HMAC'
  • 'KMAC128'4
  • 'KMAC256'4
  • 'ML-DSA-44'4
  • 'ML-DSA-65'4
  • 'ML-DSA-87'4
  • 'RSA-PSS'
  • 'RSASSA-PKCS1-v1_5'
Attributes
unwrapAlgorithm:<string> | <Algorithm> | <RsaOaepParams> | <AesCtrParams> | <AesCbcParams> | <AeadParams>
unwrappedKeyAlgorithm:<string> | <Algorithm> | <RsaHashedImportParams> | <EcKeyImportParams> | <HmacImportParams> | <KmacImportParams>
Attributes
extractable:<boolean>
keyUsages:<string>
[] 参见 [密钥用途][]。

在密码学中,“包装密钥”指的是导出然后加密密钥材料。此方法尝试解密一个已包装的密钥并创建一个 <CryptoKey> 实例。它等同于先对加密的密钥数据调用 subtle.decrypt()(使用 wrappedKeyunwrapAlgorithmunwrappingKey 作为输入),然后使用 unwrappedKeyAlgorithmextractablekeyUsages 参数作为输入,将结果传递给 subtle.importKey() 方法。如果成功,返回的 Promise 将以一个 <CryptoKey> 对象兑现。

目前支持的包装算法包括:

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-KW'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'RSA-OAEP'

支持的解包密钥算法包括:

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-KW'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'ECDH'
  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'5
  • 'HMAC'
  • 'KMAC128'4
  • 'KMAC256'4
  • 'ML-DSA-44'4
  • 'ML-DSA-65'4
  • 'ML-DSA-87'4
  • 'ML-KEM-512'4
  • 'ML-KEM-768'4
  • 'ML-KEM-1024'4
  • 'RSA-OAEP'
  • 'RSA-PSS'
  • 'RSASSA-PKCS1-v1_5'
  • 'X25519'
  • 'X448'5

使用 algorithm 中给出的方法和参数以及 key 提供的密钥材料,此方法尝试验证 signature 是否是 data 的有效密码学签名。返回的 Promise 将解决为 truefalse

目前支持的算法包括:

  • 'ECDSA'
  • 'Ed25519'
  • 'Ed448'5
  • 'HMAC'
  • 'KMAC128'4
  • 'KMAC256'4
  • 'ML-DSA-44'4
  • 'ML-DSA-65'4
  • 'ML-DSA-87'4
  • 'RSA-PSS'
  • 'RSASSA-PKCS1-v1_5'

在密码学中,“包装密钥”指的是导出然后加密密钥材料。此方法会将密钥材料导出为 format 标识的格式,然后使用 wrapAlgorithm 指定的方法和参数以及 wrappingKey 提供的密钥材料对其进行加密。它等同于使用 formatkey 作为参数调用 subtle.exportKey(),然后将结果作为输入传递给 subtle.encrypt() 方法,使用 wrappingKeywrapAlgorithm 作为输入。如果成功,返回的 Promise 将以一个包含加密密钥数据的 <ArrayBuffer> 兑现。

目前支持的包装算法包括:

  • 'AES-CBC'
  • 'AES-CTR'
  • 'AES-GCM'
  • 'AES-KW'
  • 'AES-OCB'4
  • 'ChaCha20-Poly1305'4
  • 'RSA-OAEP'

算法参数对象定义了各种 <SubtleCrypto> 方法所使用的方法和参数。虽然此处描述为“类”,但它们是简单的 JavaScript 字典对象。

额外的输入,不被加密但包含在数据的认证中。additionalData 的使用是可选的。

对于使用给定密钥的每次加密操作,初始化向量必须是唯一的。

  • 类型:<string> 必须是 'AES-GCM''AES-OCB''ChaCha20-Poly1305'
  • 类型:<number> 生成的认证标签的位数大小。
  • 类型:<string> 必须是 'AES-CBC''AES-CTR''AES-GCM''AES-OCB''AES-KW' 之一

要派生的 AES 密钥的长度。必须是 128192256

提供初始化向量。其长度必须恰好为 16 字节,并且应该是不可预测且密码学随机的。

  • 类型:<string> 必须是 'AES-CBC'

计数器块的初始值。其长度必须恰好为 16 字节。

AES-CTR 方法使用块的最右边 length 位作为计数器,其余位作为 nonce。

  • 类型:<number> aesCtrParams.counter 中用作计数器的位数。
  • 类型:<string> 必须是 'AES-CTR'

AES 密钥的长度(位)。

要生成的 AES 密钥的长度。必须是 128192256

  • 类型:<string> 必须是 'AES-CBC''AES-CTR''AES-GCM''AES-KW' 之一

表示可选的关联数据。

表示内存大小(kibibytes)。必须至少是并行度的 8 倍。

  • 类型:<string> 必须是 'Argon2d''Argon2i''Argon2id' 之一。

表示 nonce,在密码哈希应用中作为盐。

表示并行度。

表示遍数。

表示可选的秘密值。

表示 Argon2 版本号。默认且当前唯一定义的版本是 19 (0x13)。

  • 类型:<string> 必须是 'Ed448'5'ML-DSA-44'4'ML-DSA-65'4、或 'ML-DSA-87'4

context 成员表示要与消息关联的可选上下文数据。

  • 类型:<string> 必须是 'cSHAKE128'4'cSHAKE256'4
  • 类型:<number> 表示请求的输出长度(位)。

functionName 成员表示 NIST 的函数名字节字符串,用于 将构建于 cSHAKE 之上的函数进行域分离。可接受的值为:

  • 空值或 undefined,在这种情况下 cSHAKE 等同于普通 SHAKE
  • ASCII 字节序列 'KMAC'
  • ASCII 字节序列 'TupleHash'
  • ASCII 字节序列 'ParallelHash'

这段内容看起来是 Node.js Web Crypto / CryptoKey / KeyGen / derive / encrypt 相关文档的中文片段,而且里面的 __TRANSDOC_LOCK_*__ 是未替换的占位符。

如果你的目标是:

  1. 把这些占位符还原成真实术语/类名
  2. 翻译成完整中文
  3. 整理成可读的文档

我可以继续帮你做。
你只要回复我一句:

  • “帮我还原占位符”
  • “帮我整理成完整中文文档”
  • “帮我说明这段内容讲的是什么”

如果你愿意,我也可以直接根据上下文推断出这些条目对应的 Node.js Crypto API 名称并补全。

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

如果表示为 <Algorithm>,对象的 name 属性必须是上述列出的值之一。

要为 HMAC 密钥生成的位数。如果省略,长度将由所用的哈希算法确定。 这是可选的,在大多数情况下应省略。

  • 类型:<string> 必须是 'HMAC'

KangarooTwelve 的可选自定义字符串。

  • 类型:<string> 必须是 'KT128'4'KT256'4
  • 类型:<number> 表示请求的输出长度(位)。

KMAC 密钥的可选位数。这是可选的,在大多数情况下应省略。

  • 类型:<string> 必须是 'KMAC128''KMAC256'

KMAC 密钥的长度(位)。

要为 KMAC 密钥生成的位数。如果省略,长度将由所用的 KMAC 算法确定。 这是可选的,在大多数情况下应省略。

  • 类型:<string> 必须是 'KMAC128''KMAC256'
  • 类型:<string> 必须是 'KMAC128''KMAC256'
  • 类型:<number> 表示请求的输出长度(位)。

customization 成员表示可选的自定义字符串。

如果表示为 <string>,值必须是以下之一:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

如果表示为 <Algorithm>,对象的 name 属性必须是上述列出的值之一。

PBKDF2 算法在派生位时应进行的迭代次数。

  • 类型:<string> 必须是 'PBKDF2'

应至少为 16 个随机或伪随机字节。

如果表示为 <string>,值必须是以下之一:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

如果表示为 <Algorithm>,对象的 name 属性必须是上述列出的值之一。

  • 类型:<string> 必须是 'RSASSA-PKCS1-v1_5''RSA-PSS''RSA-OAEP' 之一。

RSA 模数的长度(位)。

RSA 公钥指数。

如果表示为 <string>,值必须是以下之一:

  • 'SHA-1'
  • 'SHA-256'
  • 'SHA-384'
  • 'SHA-512'
  • 'SHA3-256'4
  • 'SHA3-384'4
  • 'SHA3-512'4

如果表示为 <Algorithm>,对象的 name 属性必须是上述列出的值之一。

RSA 模数的长度(位)。作为最佳实践,这应至少为 2048

  • 类型:<string> 必须是 'RSASSA-PKCS1-v1_5''RSA-PSS''RSA-OAEP' 之一。

RSA 公钥指数。这必须是一个 <Uint8Array>,包含一个大端无符号整数,该整数必须适合 32 位。<Uint8Array> 可能包含任意数量的前导零位。该值必须是质数。除非有理由使用不同的值,否则使用 new Uint8Array([1, 0, 1]) (65537) 作为公钥指数。

额外的字节集合,不会被加密,但将绑定到生成的密文。

rsaOaepParams.label 参数是可选的。

  • 类型:<string> 必须是 'RSA-OAEP'
  • 类型:<string> 必须是 'RSA-PSS'

要使用的随机盐的长度(字节)。

可选的域分离字节 (0x01-0x7f)。默认为 0x1f

  • 类型:<string> 必须是 'TurboSHAKE128'4'TurboSHAKE256'4
  • 类型:<number> 表示请求的输出长度(位)。

Footnotes

  1. 需要 OpenSSL >= 3.0 2 3

  2. 需要 OpenSSL >= 3.2 2 3

  3. 需要 OpenSSL >= 3.5 2 3 4 5 6

  4. 参见 Web Cryptography API 中的现代算法 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136

  5. 参见 Web Cryptography API 中的安全曲线 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17