crypto.randomBytes(size[, callback])
size
<number>callback
<Function>- 返回: <Buffer> 如果未提供
callback
函数。
生成加密强伪随机数据。
size
参数是数字,指示要生成的字节数。
如果提供了 callback
函数,则异步生成字节,并使用两个参数调用 callback
函数:err
和 buf
。
如果发生错误,则 err
将是 Error
对象;否则就是 null
。
buf
参数是包含生成字节的 Buffer
。
// 异步的
const crypto = require('crypto');
crypto.randomBytes(256, (err, buf) => {
if (err) throw err;
console.log(`${buf.length} bytes of random data: ${buf.toString('hex')}`);
});
如果未提供 callback
函数,则同步生成随机字节并作为 Buffer
返回。
如果生成字节出现问题,则会抛出错误。
// 同步的
const buf = crypto.randomBytes(256);
console.log(
`${buf.length} bytes of random data: ${buf.toString('hex')}`);
crypto.randomBytes()
方法将不会完成,直到有足够的可用熵。
这通常不会超过几毫秒。
可以想象,生成随机字节的唯一时间可能会阻塞更长的时间是在启动之后,此时整个系统的熵仍然很低。
此 API 使用 libuv 的线程池,这对某些应用程序可能会产生意外的负面性能影响;有关更多信息,请参阅 UV_THREADPOOL_SIZE
文档。
crypto.randomBytes()
的异步版本是在单个线程池请求中执行的。
为了最大限度地减少线程池任务长度变化,在执行客户端请求时将大型 randomBytes
请求分区。
size
<number>callback
<Function>- Returns: <Buffer> if the
callback
function is not provided.
Generates cryptographically strong pseudo-random data. The size
argument
is a number indicating the number of bytes to generate.
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 crypto = require('crypto');
crypto.randomBytes(256, (err, buf) => {
if (err) throw err;
console.log(`${buf.length} bytes of random data: ${buf.toString('hex')}`);
});
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 buf = crypto.randomBytes(256);
console.log(
`${buf.length} bytes of random data: ${buf.toString('hex')}`);
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.
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.
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.