Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点中的getRandomValues();预期的Uint8Array“;_Javascript_Node.js_Npm_Cryptography - Fatal编程技术网

Javascript 节点中的getRandomValues();预期的Uint8Array“;

Javascript 节点中的getRandomValues();预期的Uint8Array“;,javascript,node.js,npm,cryptography,Javascript,Node.js,Npm,Cryptography,我正在尝试将getRandomValues()函数用于一个加密RESTAPI,我正在进行实践。我正在为服务器使用Node。因此,我知道我没有一个窗口对象也包含加密对象,而加密对象通常包含“getRandomValues()”函数 每当我测试它时,我都会遇到这样的错误:TypeError:expected-Uint8Array 此错误发生在该函数的第3行: getrand: function (places) { var array = new Uint32Array(20); getRa

我正在尝试将getRandomValues()函数用于一个加密RESTAPI,我正在进行实践。我正在为服务器使用Node。因此,我知道我没有一个窗口对象也包含加密对象,而加密对象通常包含“getRandomValues()”函数

每当我测试它时,我都会遇到这样的错误:
TypeError:expected-Uint8Array

此错误发生在该函数的第3行:

getrand: function (places) {
  var array = new Uint32Array(20);
  getRandomValues(array);

  var ret = array[0];
  for (var i = 1; i < array.size; i++) {
    ret *= array[i];
  }

  ret = this.shiftnum(ret, 10);
  return ret;
},
这也是我在示例中看到的相同格式。我还尝试制作一个非常简单的测试函数来调试此问题,如下所示:

test: function() {
  var array = new Uint32Array(10);
  getRandomValues(array);
  console.log(array[0]);
  return;
}
同样的问题也发生在第三行。此外,我还尝试更改
var数组=新的uint32数组(10)行到
var数组=新的Uint8Array(10)只是为了缓和错误,但错误保持不变

基本上,我想弄明白为什么这行不通。这件事我已经搞了好几天了,不知道我做错了什么


提前感谢。

该软件包旨在通过
require('crypto')在浏览器或节点上工作。randomBytes
,因为您只希望它在节点上工作,所以您可以自己使用功能
randomBytes

var crypto = require('crypto') 
var array = crypto.randomBytes(10).toJSON().data
console.log(array)
// [ 233, 217, 45, 204, 150, 171, 160, 70, 18, 138 ]

请注意,
randomBytes
返回一个缓冲区该包旨在通过
require('crypto')在浏览器或节点上工作。randomBytes
,因为您只希望它在节点上工作,所以您可以自己使用函数
randomBytes

var crypto = require('crypto') 
var array = crypto.randomBytes(10).toJSON().data
console.log(array)
// [ 233, 217, 45, 204, 150, 171, 160, 70, 18, 138 ]

请注意,
randomBytes
返回一个缓冲区

我发现了我自己的错误:

GetRandomValue(buf) 使用加密随机数据填充基于整数的TypedArray buf 数字。检查并使用以下第一项:

window.crypto.getRandomValues

window.msCrypto.getRandomValues

Node.js加密

如果以上任何一项都不可用,则抛出一个错误

如果buf.length>65536(即使Node.js 加密,它没有这个限制,正在使用)

如果使用Node.js crypto,则buf必须是Uint8Array,否则为 将抛出TypeError


显然,我使用的是Node.js crypto,因此我需要一个Uint8Array。我不知道以前发生了什么,但在这次更改代码后,它起了作用。

我发现了我自己的错误:

GetRandomValue(buf) 使用加密随机数据填充基于整数的TypedArray buf 数字。检查并使用以下第一项:

window.crypto.getRandomValues

window.msCrypto.getRandomValues

Node.js加密

如果以上任何一项都不可用,则抛出一个错误

如果buf.length>65536(即使Node.js 加密,它没有这个限制,正在使用)

如果使用Node.js crypto,则buf必须是Uint8Array,否则为 将抛出TypeError

显然,我使用的是Node.js crypto,因此我需要一个Uint8Array。我不知道以前发生了什么,但这次修改代码后,它起了作用