crypto.randomFill(buffer[, offset][, size], callback)
曆史
版本 | 變化 |
---|---|
v18.0.0 | 將無效回調傳遞給 |
v9.0.0 |
|
v7.10.0、v6.13.0 | 添加於:v7.10.0、v6.13.0 |
參數
buffer
<ArrayBuffer> | <Buffer> | <TypedArray> | <DataView> 必須提供。提供的buffer
的大小不得大於2**31 - 1
。offset
<number> 默認:0
size
<number> 默認:buffer.length - offset
。size
不得大於2**31 - 1
。callback
<Function>function(err, buf) {}
。
此函數類似於
,但要求第一個參數是將被填充的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')); });
任何 ArrayBuffer
、 TypedArray
或 DataView
實例都可以作為 buffer
傳遞。
雖然這包括 Float32Array
和 Float64Array
的實例,但此函數不應用於生成隨機浮點數。結果可能包含 +Infinity
、 -Infinity
和 NaN
,即使數組僅包含有限數,它們也不是從均勻隨機分布中抽取的,也沒有有意義的下限或上限。
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
請求進行分區。
相關用法
- Node.js crypto.randomFill()用法及代碼示例
- Node.js crypto.randomFillSync(buffer[, offset][, size])用法及代碼示例
- Node.js crypto.randomFillSync()用法及代碼示例
- Node.js crypto.randomInt([min, ]max[, callback])用法及代碼示例
- Node.js crypto.randomBytes()用法及代碼示例
- Node.js crypto.randomInt()用法及代碼示例
- Node.js crypto.randomUUID()用法及代碼示例
- Node.js crypto.randomBytes(size[, callback])用法及代碼示例
- Node.js crypto.createHmac()用法及代碼示例
- Node.js crypto.constants用法及代碼示例
- Node.js crypto.publicEncrypt()用法及代碼示例
- Node.js crypto.publicDecrypt()用法及代碼示例
- Node.js crypto.pbkdf2Sync(password, salt, iterations, keylen, digest)用法及代碼示例
- Node.js crypto.createHash()用法及代碼示例
- Node.js crypto.hkdfSync()用法及代碼示例
- Node.js crypto.checkPrime()用法及代碼示例
- Node.js crypto.sign()用法及代碼示例
- Node.js crypto.webcrypto用法及代碼示例
- Node.js crypto.generateKeyPairSync(type, options)用法及代碼示例
- Node.js crypto.createCipheriv()用法及代碼示例
- Node.js crypto.scrypt(password, salt, keylen[, options], callback)用法及代碼示例
- Node.js crypto.createVerify()用法及代碼示例
- Node.js crypto.getCurves()用法及代碼示例
- Node.js crypto.generateKeyPair()用法及代碼示例
- Node.js crypto.createDiffieHellman()用法及代碼示例
注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 crypto.randomFill(buffer[, offset][, size], callback)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。