Crypto-js لجافا سكريبت (Node.js): دليل شامل مع أمثلة
في تطوير الويب الحديث، يُعتبر أمن البيانات جانبًا بالغ الأهمية. سواء كان الأمر يتعلق بتخزين كلمات مرور المستخدمين، أو نقل معلومات حساسة عبر الشبكة، أو حماية الملفات من الوصول غير المصرح به، فإن التشفير هو أساس هذه العمليات. توفر مكتبة Crypto-js مجموعة قوية وسهلة الاستخدام من خوارزميات التشفير للنظام البيئي لجافا سكريبت، حيث تعمل في كل من المتصفح وبيئة Node.js.
تنفذ هذه المكتبة مجموعة واسعة من وظائف التشفير القياسية: التشفير المتماثل (AES، DES، TripleDES)، التجزئة (MD5، SHA-1، SHA-256، SHA-512)، حساب HMAC، بالإضافة إلى توليد الأرقام العشوائية والتعامل مع الترميزات (Base64، Hex، UTF-8). لا تعتمد Crypto-js على الوحدات الأصلية لنظام التشغيل، مما يجعلها الخيار الأمثل للتطبيقات المتجانسة (الكود الذي يعمل على كل من العميل والخادم).
في هذه المقالة، سنشرح بالتفصيل عملية تثبيت المكتبة، والطرق الرئيسية مع أمثلة برمجية، بالإضافة إلى مثال عملي حقيقي لاستخدام Crypto-js لحماية البيانات في تطبيق ويب. ستكون المادة مفيدة لكل من المطورين المبتدئين والمتخصصين ذوي الخبرة الذين يرغبون في تنظيم معرفتهم بالتشفير في جافا سكريبت.
التثبيت
لتثبيت Crypto-js في مشروع Node.js، قم بتنفيذ الأمر التالي في الطرفية:
npm install crypto-js
بعد التثبيت، يمكنك استيراد المكتبة إلى الكود الخاص بك:
// لـ Node.js (CommonJS)
const CryptoJS = require("crypto-js");
// لـ ES Modules (إذا كنت تستخدم "type": "module" في ملف package.json)
import CryptoJS from "crypto-js";
بداية سريعة: مثال عملي بسيط
لنبدأ بمثال بسيط جدًا — تشفير وفك تشفير نص باستخدام خوارزمية AES:
const CryptoJS = require("crypto-js");
// الرسالة الأصلية
const message = "مرحبًا، Crypto-js!";
// المفتاح السري (يجب أن يكون قويًا في التطبيق الحقيقي)
const secretKey = "my-secret-key-123";
// التشفير
const ciphertext = CryptoJS.AES.encrypt(message, secretKey).toString();
console.log("الرسالة المشفرة:", ciphertext);
// فك التشفير
const bytes = CryptoJS.AES.decrypt(ciphertext, secretKey);
const decryptedMessage = bytes.toString(CryptoJS.enc.Utf8);
console.log("الرسالة المفكوكة:", decryptedMessage);
يوضح هذا المثال دورة العمل الأساسية للتشفير المتماثل: نقوم بتحويل النص الأصلي إلى سلسلة مشفرة (Base64)، ثم نستعيد الرسالة الأصلية باستخدام نفس المفتاح.
الطرق/الدوال/الفئات الرئيسية
دعنا نستعرض الإمكانيات الأساسية لـ Crypto-js. لكل طريقة، سنقدم التوقيع، وصفًا مختصرًا، ومثالًا عمليًا.
1. CryptoJS.AES.encrypt() / CryptoJS.AES.decrypt()
التوقيع: CryptoJS.AES.encrypt(message, key, [options]) و CryptoJS.AES.decrypt(ciphertext, key, [options])
الوظيفة: تنفذ التشفير وفك التشفير المتماثل باستخدام خوارزمية AES (معيار التشفير المتقدم). تدعم الأوضاع ECB، CBC، CFB، OFB، CTR وأحجام مفاتيح 128/192/256 بت.
const CryptoJS = require("crypto-js");
const message = "بيانات سرية";
const key = "supersecretkey123";
// التشفير مع تحديد الوضع ومتجه التهيئة (IV)
const iv = CryptoJS.lib.WordArray.random(16); // 16 بايت لـ AES-128
const encrypted = CryptoJS.AES.encrypt(message, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString();
console.log("مشفر (CBC):", encrypted);
// فك التشفير
const decrypted = CryptoJS.AES.decrypt(encrypted, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);
console.log("مفكوك:", decrypted);