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 الكامل بالعربي.