当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js crypto.randomBytes(size[, callback])用法及代码示例


crypto.randomBytes(size[, callback])

历史
版本变化
v18.0.0

将无效回调传递给 callback 参数现在会抛出 ERR_INVALID_ARG_TYPE 而不是 ERR_INVALID_CALLBACK

v9.0.0

null 作为 callback 参数传递现在会抛出 ERR_INVALID_CALLBACK

v0.5.8

添加于:v0.5.8


参数

生成加密的强伪随机数据。 size 参数是一个数字,表示要生成的字节数。

如果提供了 callback 函数,则会异步生成字节,并使用两个参数调用 callback 函数:errbuf。如果发生错误,err 将是一个Error 对象;否则为 nullbuf 参数是一个包含生成字节的 Buffer

// Asynchronous
const {
  randomBytes
} = await import('node:crypto');

randomBytes(256, (err, buf) => {
  if (err) throw err;
  console.log(`${buf.length} bytes of random data: ${buf.toString('hex')}`);
});// Asynchronous
const {
  randomBytes,
} = require('node:crypto');

randomBytes(256, (err, buf) => {
  if (err) throw err;
  console.log(`${buf.length} bytes of random data: ${buf.toString('hex')}`);
});

如果未提供 callback 函数,则同步生成随机字节并以 Buffer 的形式返回。如果生成字节时出现问题,将引发错误。

// Synchronous
const {
  randomBytes
} = await import('node:crypto');

const buf = randomBytes(256);
console.log(
  `${buf.length} bytes of random data: ${buf.toString('hex')}`);// Synchronous
const {
  randomBytes,
} = require('node:crypto');

const buf = randomBytes(256);
console.log(
  `${buf.length} bytes of random data: ${buf.toString('hex')}`);

在有足够的可用熵之前,crypto.randomBytes() 方法不会完成。这通常不会花费超过几毫秒的时间。可以想象,生成随机字节的唯一时间可能会阻塞更长的时间是在启动之后,此时整个系统的熵仍然很低。

此 API 使用 libuv 的线程池,这可能会对某些应用程序产生令人惊讶的负面性能影响;有关详细信息,请参阅 UV_THREADPOOL_SIZE 文档。

crypto.randomBytes() 的异步版本在单个线程池请求中执行。为了最大限度地减少线程池任务长度变化,请在执行客户端请求时对大型 randomBytes 请求进行分区。

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 crypto.randomBytes(size[, callback])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。