ทั้งเมธอด crypto.randomFill() และ crypto.randomBytes() มีลักษณะการทำงานคล้ายกันมาก ความแตกต่างเดียวคือ – ในเมธอด randomFill() อาร์กิวเมนต์แรกคือบัฟเฟอร์ที่จะถูกเติม ยังมีเมธอด callback ที่จะถูกเรียกเมื่อพบข้อผิดพลาด หากมีการกำหนด callback
ไวยากรณ์
crypto.randomFill(buffer, [offset], [size], [callback])
พารามิเตอร์
พารามิเตอร์ข้างต้นอธิบายดังนี้:
buffer – ฟิลด์นี้มีเนื้อหาข้อมูล ประเภทบัฟเฟอร์ที่เป็นไปได้: string, TypedArray, Buffer, ArrayBuffer, DataView ขนาดบัฟเฟอร์ไม่สามารถมากกว่า
2**31-1ได้offset – ค่าของออฟเซ็ตที่ randomFill จะเริ่มต้น ค่าเริ่มต้นคือ 0
size – ขนาดของบัฟเฟอร์หลังออฟเซ็ต คือ
(buffer.length - offset)ค่านี้ไม่สามารถมากกว่า2**31-1ได้callback – ฟังก์ชันที่จะถูกเรียกเมื่อมีข้อผิดพลาดเกิดขึ้น
ตัวอย่าง
สร้างไฟล์ชื่อ randomFill.js และคัดลอกโค้ดด้านล่าง หลังจากสร้างไฟล์แล้ว ใช้คำสั่งต่อไปนี้เพื่อรันโค้ด:
node randomFill.js
randomFill.js
// โปรแกรม Node.js สาธิตการทำงานของเมธอด crypto.randomFill()
// นำเข้าโมดูล crypto
const crypto = require('crypto');
const fs = require("fs");
// เริ่มต้นค่าบัฟเฟอร์ไบต์
const buf = Buffer.alloc(6);
// เรียกเมธอด randomFill ด้วยบัฟเฟอร์และ callback
crypto.randomFill(buf, (err, buf) => {
if (err) throw err;
// แสดงค่าข้อมูลบัฟเฟอร์หลังเติมแล้ว
console.log(buf.toString('ascii'));
});
// เรียก randomFill ด้วยพารามิเตอร์ทั้งหมดที่กำหนด
crypto.randomFill(buf, 3, 2, (err, buf) => {
if (err) throw err;
// แสดงข้อมูลสุ่มใหม่ในบัฟเฟอร์
console.log(buf.toString('base64'));
});
// สามารถเห็นได้ว่าผลลัพธ์จะเหมือนกันสำหรับฟังก์ชันด้านล่าง
crypto.randomFill(buf, 3, 3, (err, buf) => {
if (err) throw err;
console.log(buf.toString('base64'));
});
ผลลัพธ์
C:\home\node>> node randomFill.js f!]"+– ZqHdoit8 ZqHdoit8
ตัวอย่างเพิ่มเติม
ลองดูตัวอย่างอีกหนึ่งกรณี:
// โปรแกรม Node.js สาธิตการทำงานของเมธอด crypto.randomFill()
// นำเข้าโมดูล crypto
const crypto = require('crypto');
const fs = require("fs");
// เริ่มต้นค่าบัฟเฟอร์ไบต์โดยใช้ DataView
const data = new DataView(new ArrayBuffer(16));
// เรียกเมธอด randomFill ด้วยบัฟเฟอร์และ callback
crypto.randomFill(data, (err, buf) => {
if (err) throw err;
// แสดงข้อมูล randomFill พร้อมการเข้ารหัส
console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength).toString('ascii'));
});
ผลลัพธ์
C:\home\node>> node randomFill.js >h(Be#D8h0