首页 > 解决方案 > 类型错误:crypto__WEBPACK_IMPORTED_MODULE_5__.generateKeyPairSync 不是函数

问题描述

我安装了 Node.js v12.13.0,但仍然出现以下错误。我已经检查了很多关于此的问题,但所有问题的解决方案都是更新的节点版本。

Uncaught TypeError: crypto__WEBPACK_IMPORTED_MODULE_5__.generateKeyPairSync is not a function
    at Login.render (Login.jsx:31)
    at finishClassComponent (react-dom.development.js:17098)
    at updateClassComponent (react-dom.development.js:17051)
    at beginWork (react-dom.development.js:18513)
    at HTMLUnknownElement.callCallback (react-dom.development.js:189)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:238)
    at invokeGuardedCallback (react-dom.development.js:291)
    at beginWork$1 (react-dom.development.js:23055)
    at performUnitOfWork (react-dom.development.js:22022)
    at workLoopSync (react-dom.development.js:21995)
    at performSyncWorkOnRoot (react-dom.development.js:21613)
    at scheduleUpdateOnFiber (react-dom.development.js:21045)
    at updateContainer (react-dom.development.js:24194)
    at react-dom.development.js:24577
    at unbatchedUpdates (react-dom.development.js:21763)
    at legacyRenderSubtreeIntoContainer (react-dom.development.js:24576)
    at Object.render (react-dom.development.js:24659)
    at Module../src/index.js (index.js:27)
    at __webpack_require__ (bootstrap:781)
    at fn (bootstrap:149)
    at Object.1 (PlayerStore.jsx:21)
    at __webpack_require__ (bootstrap:781)
    at checkDeferredModules (bootstrap:45)
    at Array.webpackJsonpCallback [as push] (bootstrap:32)
    at main.chunk.js:1

标签: node.jsreactjsencryptioncryptojs

解决方案


从堆栈跟踪来看,这段代码似乎正在浏览器中运行。该crypto.generateKeyPairSyncAPI 仅在 Node.js 中可用。基本上,它只能在服务器端使用,不能在前端使用。

你需要像Web Crypto API这样的东西,内置在现代浏览器中。这是一个示例 RSA 密钥对生成:

let keyPair = window.crypto.subtle.generateKey(
  {
    name: "RSA-OAEP",
    modulusLength: 4096,
    publicExponent: new Uint8Array([1, 0, 1]),
    hash: "SHA-256"
  },
  true,
  ["encrypt", "decrypt"]
);

推荐阅读