【问题标题】:Node.js crypto.randomBytes() is not a functionNode.js crypto.randomBytes() 不是函数
【发布时间】:2022-03-15 20:15:09
【问题描述】:

出于某种原因,我尝试使用的函数显然不是函数

Welcome to Node.js v14.15.1.
Type ".help" for more information.
> const crypto = require("crypto");
undefined
> x = crypto.randomBytes(32).toString("hex")
Uncaught TypeError: crypto.randomBytes is not a function

randomBytes() 的文档。

有什么我不明白的地方吗?

【问题讨论】:

  • 在 v17 上测试了这段摘录,效果很好。还检查了 v14.15 中 randomBytes 的文档,似乎存在,模块本身似乎已经存在很长时间了。尝试重命名变量 crypto 以避免名称阴影,但除此之外,这非常神秘。
  • 我喜欢你的双关语。是的,这很奇怪:?
  • 我已经针对 Node 的确切版本 (docker run -it node:14.15.1-slim node) 测试了您的 sn-p,但无法重现该问题。
  • 尝试记录crypto,只是为了检查它是否导入了正确的模块:console.log(crypto);,并将其与官方文档进行比较,您应该能够看到文档中提到的每个函数和常量。

标签: javascript node.js node-crypto


【解决方案1】:

似乎 getRandomBytes() 函数已被删除。我读过一些免责声明,说它不是很安全。

https://www.npmjs.com/package/crypto 被弃用消息聚集在一起,所以尽管https://stackoverflow.com/a/8856177/828184 下的大多数赞成票在我看来不再是最先进的。

在我可以简单地使用之前(像你一样,但在软件包更新之后不再使用)

import crypto from "crypto";
const token = crypto.randomBytes(64).toString('hex');

但加密现在只有 getRandomValues(),我认为它不是替代品。

只回答 nr 3 也有很多但没有那么多赞成票给了我一个工作版本https://stackoverflow.com/a/25690754/828184。所以也许也可以尝试:

import { nanoid } from "nanoid";
const token = nanoid(64); //instead of crypto.randomBytes(64).toString('hex')

如果可行,请在此处投赞成票,因为。

【讨论】:

    【解决方案2】:

    如果您尝试创建token

    您可以在 nodejs cli 中键入以下命令:

    crypto.randomBytes(64).toString('hex');

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-19
      • 2018-10-13
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      相关资源
      最近更新 更多