Node.js crypto.randomFill() 方法
crypto.randomFill() 方法与 crypto.randomBytes() 方法相同,但唯一的区别是这里的第一个参数是将被填充的buffer
,它还有一个作为参数传递的回调函数。但是,如果回调函数不可用,则会引发错误。
句法:
crypto.randomFill( buffer, offset, size, callback )
参数:此方法接受上面提到的四个参数,如下所述:
- buffer:此参数保存 Buffer、TypedArray 或 DataView 类型的数据。
- offset:它是一个数字,默认值为 0。
- size:它是一个数字,其默认值为(buffer.length – offset) 。
- 回调:它是一个带有两个参数的函数,即err和buf。
返回值:返回缓冲区。
下面的示例说明了在 Node.js 中使用crypto.randomFill() 方法:
示例 1:
// Node.js program to demonstrate the
// crypto.randomFill() method
// Including crypto module
const crypto = require('crypto');
// Defining buffer
const buf = Buffer.alloc(6);
// Calling randomFill method with two
// of its parameters
crypto.randomFill(buf, (err, buf) => {
if (err) throw err;
// Prints random data in buffer
console.log(buf.toString('ascii'));
});
// Calling randomFill method with all
// its parameters
crypto.randomFill(buf, 3, 2, (err, buf) => {
if (err) throw err;
// Prints random data in buffer
console.log(buf.toString('base64'));
});
// The output of this is same as above
crypto.randomFill(buf, 3, 3, (err, buf) => {
if (err) throw err;
console.log(buf.toString('base64'));
});
输出:
&43Jho0s5v0
Jho0s5v0
在这里,最后两个值是相同的。
示例 2:
// Node.js program to demonstrate the
// crypto.randomFill() method
// Including crypto module
const crypto = require('crypto');
// Defining dataview
const datv = new DataView(new ArrayBuffer(6));
// Calling randomFill method with DataView
// instance as buffer
crypto.randomFill(datv, (err, buf) => {
if (err) throw err;
// Prints random data which is encoded
console.log(Buffer.from(buf.buffer,
buf.byteOffset, buf.byteLength)
.toString('ascii'));
});
输出:
ceVMb
在这里,任何TypedArray 或 DataView实例都作为缓冲区传递,并且每次运行都会得到不同的输出。
参考: https://nodejs.org/api/crypto.html#crypto_crypto_randomfill_buffer_offset_size_callback