تخطَّ إلى المحتوى

crypto.randomBytes()

توليد بايتات عشوائية آمنة تشفيريًا crypto.randomBytes()

crypto.randomBytes() تولّد بايتات عشوائية آمنة تشفيريًا (cryptographically secure) — الأساس لتوليد توكنات ومفاتيح وقيم عشوائية حساسة.

crypto.randomBytes(size[, callback]) تُرجع Buffer بحجم size بايت من بيانات عشوائية مناسبة للاستخدامات الأمنية. بدون callback تعمل بشكل متزامن وتُرجع Buffer مباشرة؛ مع callback تعمل بشكل غير متزامن وتستدعيه بنمط الخطأ-أولًا: (err, buffer).

الفرق الجوهري بينها وبين Math.random() أن الأخيرة غير آمنة تشفيريًا (predictable بدرجة كافية لمهاجم) — لا تصلح إطلاقًا لتوليد توكنات جلسات أو مفاتيح.

الصياغة

crypto.randomBytes(size[, callback])

📄 مثال

const crypto = require('node:crypto');

// متزامن
const token = crypto.randomBytes(16).toString('hex');
console.log(token); // مثلًا: '9f86d081884c7d65...'

// غير متزامن
crypto.randomBytes(16, (err, buf) => {
  if (err) throw err;
  console.log(buf.toString('hex'));
});

أهم المعاملات

المعاملالوظيفة
sizeعدد البايتات المراد توليدها
callback(err, buffer)اختياري — إن حُذف تعمل الدالة بشكل متزامن وتُرجع Buffer مباشرة

💡 نصائح عملية

  • حوّل الناتج لنص بـ .toString('hex') أو .toString('base64') لاستخدامه كتوكن نصي بروابط أو رؤوس HTTP
  • استخدم النسخة غير المتزامنة (مع callback) بخوادم تخدم طلبات كثيرة لتفادي حجب حلقة الأحداث عند توليد كميات كبيرة

⚠️ أخطاء شائعة

  • استخدام Math.random() بدل crypto.randomBytes() لأي غرض أمني (توكنات، مفاتيح، أكواد تحقق) — Math.random غير آمن تشفيريًا

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار NODEJS الكامل بالعربي.