在nodejs代码中使用window.crypto

d6kp6zgx  于 2023-02-03  发布在  Node.js
关注(0)|答案(5)|浏览(495)

我尝试在一个nodejs脚本中使用window.crypto.getRandomValues方法,据我所知,当我在node中运行这样一个简单的代码时,没有window元素:

var array = new Uint32Array(10);
window.crypto.getRandomValues(array);

这就是为什么我得到这个错误:

ReferenceError: window is not defined

如何在代码中使用此方法?
谢谢

e5nszbig

e5nszbig1#

您可以使用内置的crypto模块,它提供了crypto.randomBytes()crypto.pseudoRandomBytes()
但是,应该注意的是,这些方法给予了一个Buffer对象,您不能传入Uint32Array或类似对象,因此API略有不同。

roqulrg3

roqulrg32#

const crypto = require('crypto').webcrypto;

let a = new Uint8Array(24);
console.log(crypto.getRandomValues(a));

它的工作原理几乎与浏览器中的工作原理完全相同,即在requrie('crypto');的末尾添加webcrypto

zwghvu4y

zwghvu4y3#

您可以使用与窗口元素相同的模块:get-random-values
安装:

npm install get-random-values --save

使用它:

var getRandomValues = require('get-random-values');

var array = new Uint32Array(10);
getRandomValues(array);
4zcjmb1e

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

bbmckpt7

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?

相关问题