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


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


crypto.randomBytes(size[, callback])

曆史
版本變化
v18.0.0

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

v9.0.0

null 作為 callback 參數傳遞現在會拋出 ERR_INVALID_CALLBACK

v0.5.8

添加於:v0.5.8


參數

生成加密的強偽隨機數據。 size 參數是一個數字,表示要生成的字節數。

如果提供了 callback 函數,則會異步生成字節,並使用兩個參數調用 callback 函數:errbuf。如果發生錯誤,err 將是一個Error 對象;否則為 nullbuf 參數是一個包含生成字節的 Buffer

// 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 的形式返回。如果生成字節時出現問題,將引發錯誤。

// 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() 方法不會完成。這通常不會花費超過幾毫秒的時間。可以想象,生成隨機字節的唯一時間可能會阻塞更長的時間是在啟動之後,此時整個係統的熵仍然很低。

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

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

相關用法


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