返回

Node.js v18 OpenSSL 错误 \

vue.js

Node.js v18 中 OpenSSL 错误:error:03000086:深入探讨及解决方法

问题

升级到 Node.js v18 后,使用 OpenSSL 时你可能会遇到恼人的错误:“error:03000086:digital envelope routines::initialization error”。这个错误阻止你正常进行加密操作,阻碍你的开发进程。不要担心,解决办法近在眼前。

原因

该错误表明在初始化 OpenSSL 的数字信封例程时遇到了困难。这可能是由于依赖项缺失或损坏所致。

解决方法

有两种简单的方法可以解决此错误:

方法 1:安装正确的 OpenSSL 版本

首先,确保已安装与 Node.js v18 兼容的 OpenSSL 版本。可以通过运行以下命令进行验证:

openssl version

如果版本不是 3.0.x,请使用相应的软件包管理器安装正确版本。例如,对于 Debian/Ubuntu 系统:

sudo apt-get install libssl-dev

方法 2:重建 OpenSSL 绑定

如果已安装正确的 OpenSSL 版本,但仍然遇到错误,则可以尝试重建 OpenSSL 绑定:

  1. 卸载现有的 OpenSSL 绑定:
npm uninstall -g --save-dev node-gyp
npm uninstall --save-dev openssl-node
  1. 重新安装 OpenSSL 绑定:
npm i -g --save-dev node-gyp
npm i --save-dev openssl-node
  1. 重新安装依赖项:
npm install

其他提示

  • 确保你的系统已更新至最新版本。
  • 尝试使用不同版本的 Node.js,例如 v16 或 v14。
  • 如果你仍然遇到问题,请参考 Node.js 社区或 OpenSSL 文档寻求更深入的帮助。

示例代码

修复错误后,可以使用以下代码示例使用 OpenSSL 加密和解密数据:

const crypto = require('crypto');

// 创建新的 OpenSSL 对象
const openssl = crypto.createCipheriv('aes-256-cbc', Buffer.from('mysecretkey'), Buffer.from('myinitializationvector'));

// 加密数据
const encryptedData = openssl.update('mydata', 'utf8', 'base64');
encryptedData += openssl.final('base64');

// 解密数据
const decryptedData = openssl.update(encryptedData, 'base64', 'utf8');
decryptedData += openssl.final('utf8');

console.log(decryptedData);

结论

修复 Node.js v18 中的 OpenSSL 错误并不困难。通过安装正确的 OpenSSL 版本或重建 OpenSSL 绑定,你可以轻松解决此问题。遵循这些步骤,即可恢复正常的加密操作。

常见问题解答

1. 如何检查我的 OpenSSL 版本?
使用命令 openssl version

2. 如何卸载 OpenSSL 绑定?
运行 npm uninstall -g --save-dev node-gypnpm uninstall --save-dev openssl-node

3. 如何重新安装依赖项?
使用 npm install

4. 如何更新我的系统?
根据你的操作系统使用相应的软件更新工具。

5. 在哪里可以找到更多帮助?
参考 Node.js 社区或 OpenSSL 文档。