crypto.randomBytes(size[, callback])


  • size <number> 要生成的字节数。size 不得大于 2**31 - 1

    ¥size <number> The number of bytes to generate. The size must not be larger than 2**31 - 1.

  • callback <Function>

  • 返回:如果未提供 callback 函数,则为 <Buffer>

    ¥Returns: <Buffer> if the callback function is not provided.

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

¥Generates cryptographically strong pseudorandom data. The size argument is a number indicating the number of bytes to generate.

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

¥If a callback function is provided, the bytes are generated asynchronously and the callback function is invoked with two arguments: err and buf. If an error occurs, err will be an Error object; otherwise it is null. The buf argument is a Buffer containing the generated bytes.

// 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 返回。如果生成字节出现问题,则会抛出错误。

¥If the callback function is not provided, the random bytes are generated synchronously and returned as a Buffer. An error will be thrown if there is a problem generating the bytes.

// 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() 方法将不会完成,直到有足够的可用熵。这通常不会超过几毫秒。可以想象,生成随机字节的唯一时间可能会阻塞更长的时间是在启动之后,此时整个系统的熵仍然很低。

¥The crypto.randomBytes() method will not complete until there is sufficient entropy available. This should normally never take longer than a few milliseconds. The only time when generating the random bytes may conceivably block for a longer period of time is right after boot, when the whole system is still low on entropy.

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

¥This API uses libuv's threadpool, which can have surprising and negative performance implications for some applications; see the UV_THREADPOOL_SIZE documentation for more information.

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

¥The asynchronous version of crypto.randomBytes() is carried out in a single threadpool request. To minimize threadpool task length variation, partition large randomBytes requests when doing so as part of fulfilling a client request.