我尝试在一个nodejs脚本中使用window.crypto.getRandomValues方法,据我所知,当我在node中运行这样一个简单的代码时,没有window元素:
window.crypto.getRandomValues
window
var array = new Uint32Array(10); window.crypto.getRandomValues(array);
这就是为什么我得到这个错误:
ReferenceError: window is not defined
如何在代码中使用此方法?谢谢
e5nszbig1#
您可以使用内置的crypto模块,它提供了crypto.randomBytes()和crypto.pseudoRandomBytes()。但是,应该注意的是,这些方法给予了一个Buffer对象,您不能传入Uint32Array或类似对象,因此API略有不同。
crypto
crypto.randomBytes()
crypto.pseudoRandomBytes()
roqulrg32#
const crypto = require('crypto').webcrypto; let a = new Uint8Array(24); console.log(crypto.getRandomValues(a));
它的工作原理几乎与浏览器中的工作原理完全相同,即在requrie('crypto');的末尾添加webcrypto。
requrie('crypto');
webcrypto
zwghvu4y3#
您可以使用与窗口元素相同的模块:get-random-values安装:
npm install get-random-values --save
使用它:
var getRandomValues = require('get-random-values'); var array = new Uint32Array(10); getRandomValues(array);
4zcjmb1e4#
下面是如何在节点16中使用TypeScript。我劫持了web类型并覆盖了@types/node类型,它们缺少webcrypto。
import { webcrypto } from 'crypto' const crypto = webcrypto as unknown as Crypto const random = crypto.getRandomValues(new Uint8Array(24))
这个沙箱可以在节点16上运行,但是stackblitz在几个月内不会发布节点16。https://stackblitz.com/edit/koa-starter-wychx9?file=package.json发布日期:github.com/denoland/node_deno_shims/issues/56
bbmckpt75#
我也有这个问题,我是这样解决的
import * as crypto from 'node:crypto' export function randomChar() { return crypto.webcrypto.getRandomValues(new BigUint64Array(1))[0].toString(36) }
参考:How to use getRandomValues() in nodejs?
5条答案
按热度按时间e5nszbig1#
您可以使用内置的
crypto
模块,它提供了crypto.randomBytes()
和crypto.pseudoRandomBytes()
。但是,应该注意的是,这些方法给予了一个Buffer对象,您不能传入Uint32Array或类似对象,因此API略有不同。
roqulrg32#
它的工作原理几乎与浏览器中的工作原理完全相同,即在
requrie('crypto');
的末尾添加webcrypto
。zwghvu4y3#
您可以使用与窗口元素相同的模块:get-random-values
安装:
使用它:
4zcjmb1e4#
下面是如何在节点16中使用TypeScript。我劫持了web类型并覆盖了@types/node类型,它们缺少webcrypto。
这个沙箱可以在节点16上运行,但是stackblitz在几个月内不会发布节点16。https://stackblitz.com/edit/koa-starter-wychx9?file=package.json
发布日期:github.com/denoland/node_deno_shims/issues/56
bbmckpt75#
我也有这个问题,我是这样解决的
参考:How to use getRandomValues() in nodejs?