在nodejs代码中使用window.crypto

Spe*_*her 9 javascript cryptography node.js

我试图window.crypto.getRandomValues在nodejs脚本中使用该方法.根据我的理解,window当我在节点中运行这样的简单代码时,没有元素:

var array = new Uint32Array(10);
window.crypto.getRandomValues(array);
Run Code Online (Sandbox Code Playgroud)

这就是我收到此错误的原因:

ReferenceError: window is not defined
Run Code Online (Sandbox Code Playgroud)

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

谢谢

小智 22

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

let a = new Uint8Array(24);
console.log(crypto.getRandomValues(a));
Run Code Online (Sandbox Code Playgroud)

这几乎与浏览器中的一模一样,通过添加webcryptorequrie('crypto');.

  • 应该注意 crypto.webcrypto 仅在 Node.js 15.0.0+ 中可用。LTS 版本尚不支持它。 (3认同)
  • Node 16 现在是 LTS,这使它成为一个很好的答案! (3认同)

msc*_*dex 10

您可以使用内置crypto模块.它提供了一个crypto.randomBytes()以及一个crypto.pseudoRandomBytes().

但是应该注意的是,这些方法给你一个Buffer对象,你不能传入Uint32Array或类似的,所以API有点不同.

  • 请注意,从 Node 7.10.0 版本开始,NodeJS 中有一个 [`crypto.randomFillSync()`](https://nodejs.org/docs/latest/api/crypto.html#crypto_crypto_randomfillsync_buffer_offset_size) 函数,它允许您传递一个“TypedArray”。 (2认同)

Moh*_*our 6

您可以使用与window元素相同的模块:get-random-values

安装它:

npm install get-random-values --save
Run Code Online (Sandbox Code Playgroud)

用它:

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

var array = new Uint32Array(10);
getRandomValues(array);
Run Code Online (Sandbox Code Playgroud)

  • 这与 window 元素不同,这使用了 nodejs crypto (3认同)