📜  Node.js crypto.randomFill() 方法

📅  最后修改于: 2022-05-13 01:56:38.050000             🧑  作者: Mango

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