crypto.randomBytes(size[, callback])
-
size
<number> 要生成的字节数。size
不得大于2**31 - 1
。¥
size
<number> The number of bytes to generate. Thesize
must not be larger than2**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
函数: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.