當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js crypto.randomFill(buffer[, offset][, size], callback)用法及代碼示例


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

曆史
版本變化
v18.0.0

將無效回調傳遞給 callback 參數現在會拋出 ERR_INVALID_ARG_TYPE 而不是 ERR_INVALID_CALLBACK

v9.0.0

buffer 參數可以是任何 TypedArrayDataView

v7.10.0、v6.13.0

添加於:v7.10.0、v6.13.0


參數

此函數類似於 crypto.randomBytes() ,但要求第一個參數是將被填充的 Buffer 。它還要求傳入一個回調。

如果沒有提供callback 函數,則會拋出錯誤。

import { Buffer } from 'node:buffer';
const { randomFill } = await import('node:crypto');

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

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

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

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

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

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

任何 ArrayBufferTypedArrayDataView 實例都可以作為 buffer 傳遞。

雖然這包括 Float32ArrayFloat64Array 的實例,但此函數不應用於生成隨機浮點數。結果可能包含 +Infinity-InfinityNaN ,即使數組僅包含有限數,它們也不是從均勻隨機分布中抽取的,也沒有有意義的下限或上限。

import { Buffer } from 'node:buffer';
const { randomFill } = await import('node:crypto');

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

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

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

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

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

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

此 API 使用 libuv 的線程池,這可能會對某些應用程序產生令人驚訝的負麵性能影響;有關詳細信息,請參閱 UV_THREADPOOL_SIZE 文檔。

crypto.randomFill() 的異步版本在單個線程池請求中執行。為了最大限度地減少線程池任務長度變化,請在執行客戶端請求時對大型 randomFill 請求進行分區。

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 crypto.randomFill(buffer[, offset][, size], callback)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。