Node.js 中的 crypto.publicencrypt() 方法

2025年3月1日 | 阅读 3 分钟

在本文中,我们将讨论 Node.js 中的 crypto.publicencrypt() 方法,包括其语法、参数和示例。

Node.js 中的 crypto.publicencrypt() 方法是什么?

crypto.publicEncrypt() 方法是 Node.js crypto 模块的一个集成应用程序编程接口 (API)。它使用给定的公钥加密缓冲区的内容。此方法确保只有拥有相应私钥的人才能解密加密的数据。该方法支持不同的哈希函数和填充方案。

为了获得最佳安全性,请使用 crypto.constants.RSA_PKCS1_OAEP_PADDING 和 SHA-256 等哈希函数。Crypto.publicEncrypt() 调用时返回原始二进制格式的加密数据(作为 Buffer)。可以应用 base64 编码来简化数据的处理和传输。

crypto.publicEncrypt() 的一个重要特性是与多种密钥类型(包括字符串、缓冲区和 KeyObject)的兼容性。它提供了额外的选项,包括 OAEP 标签,用于进一步的加密定制。

语法

它具有以下语法:

参数

  • key:此公钥用于加密数据。加密可确保只有拥有相应私钥的人才能解密加密的数据。该密钥应为有效的 PEM 格式公钥。

此参数有多种可用格式

  1. String:已进行 PEM 编码的公钥。
  2. Buffer:存储 PEM 编码的公钥的缓冲区。
  3. KeyObject:表示公钥的 KeyObject。
  4. OaepHash:一个 OAEP(Optimal Asymmetric Encryption Padding,最优非对称加密填充)字符串,用于指定哈希函数。可以指定其他哈希函数,例如 "sha256",默认值为 "sha1"。
  5. OaepLabel:用于 OAEP 填充的标签称为 oaepLabel。它可以作为 Buffer、TypedArray 或 DataView 提供,并且是可选的。如果未指定标签,则没有标签。
  6. Passphrase:如果私钥已加密,则使用私钥的可选字符串或缓冲区密码。
  7. Padding:填充可以配置为 "crypto.constants.RSA_NO_PADDING"、"crypto.constants.RSA_PKCS1_PADDING" 或 "crypto.constants.RSA_PKCS1_OAEP_PADDING"。这是一个可选的填充值。它的类型是 "crypto.constants"。
  8. Buffer:这是需要作为缓冲区对象提供的加密数据。

返回值

在使用 crypto.publicEncrypt() 函数时,加密的内容将作为新缓冲区返回。一旦原始数据使用给定的公钥进行了加密,该缓冲区就作为密文的表示。

示例

让我们通过一个例子来说明 Node.js 中 crypto.publicEncrypt() 函数。

输出

 
Error writing public key file: EACCES: permission denied, open '/public_key.pem'   

说明

此 Node.js 脚本提供了一个创建 RSA 密钥对和加密数据的示例。最初包括 path、fs 和 crypto 模块。为了处理文件操作过程中可能出现的任何错误,generateKeyFiles 函数会生成一个 2048 位的 RSA 密钥对并将其保存到 public_key.pem。encryptString 函数读取此公钥,执行 RSA OAEP 填充和指定明文字符串的 SHA-256 哈希。接下来,为了方便阅读,脚本加密字符串 "Hii All!" 并打印原始缓冲区及其 base64 编码版本。在发生错误的情况下,我们的代码提供有用的反馈并优雅地处理故障,同时确保使用 RSA 进行安全加密。