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)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。