crypto.randomBytes(size[, callback])
- 
size<number> 要生成的字节数。size不得大于2**31 - 1。¥ size<number> The number of bytes to generate. Thesizemust not be larger than2**31 - 1.
- 
callback<Function>
- 
返回:如果未提供 callback函数,则为 <Buffer>。¥Returns: <Buffer> if the callbackfunction is not provided.
生成加密强伪随机数据。size 参数是数字,指示要生成的字节数。
¥Generates cryptographically strong pseudorandom data. The size argument
is a number indicating the number of bytes to generate.
如果提供了 callback 函数,则异步生成字节并使用两个参数调用 callback 函数:err 和 buf。如果发生错误,err 将是一个 Error 对象;否则为 null。buf 参数是包含生成字节的 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.