crypto.randomFill(buffer[, offset][, size], callback)

  • buffer {Buffer|TypedArray|DataView} Must be supplied.
  • offset {number} Default: 0
  • size {number} Default: buffer.length - offset
  • callback {Function} function(err, buf) {}.

This function is similar to [crypto.randomBytes()][] but requires the first argument to be a [Buffer][] that will be filled. It also requires that a callback is passed in.

If the callback function is not provided, an error will be thrown.

const buf = Buffer.alloc(10);
crypto.randomFill(buf, (err, buf) => {
  if (err) throw err;
  console.log(buf.toString('hex'));
});

crypto.randomFill(buf, 5, (err, buf) => {
  if (err) throw err;
  console.log(buf.toString('hex'));
});

// The above is equivalent to the following:
crypto.randomFill(buf, 5, 5, (err, buf) => {
  if (err) throw err;
  console.log(buf.toString('hex'));
});

Any TypedArray or DataView instance may be passed as buffer.

const a = new Uint32Array(10);
crypto.randomFill(a, (err, buf) => {
  if (err) throw err;
  console.log(
    Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength).toString('hex'),
  );
});

const b = new Float64Array(10);
crypto.randomFill(b, (err, buf) => {
  if (err) throw err;
  console.log(
    Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength).toString('hex'),
  );
});

const c = new DataView(new ArrayBuffer(10));
crypto.randomFill(c, (err, buf) => {
  if (err) throw err;
  console.log(
    Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength).toString('hex'),
  );
});

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.randomFill() is carried out in a single threadpool request. To minimize threadpool task length variation, partition large randomFill requests when doing so as part of fulfilling a client request.


最后修改 April 16, 2020: 加密 (a75e592)