التشفير في TypeScript: التشفير والتجزئة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التشفير في TypeScript: تشفير وتجزئة البيانات



في تطوير الويب الحديث، أمان البيانات هو جانب بالغ الأهمية. TypeScript، كإضافة صارمة التوصيف فوق JavaScript، يوفر أدوات قوية لتنفيذ العمليات التشفيرية. في هذه المقالة، سنستعرض خوارزميات التشفير والتجزئة الرئيسية المتاحة في TypeScript، ونوضح كيفية تطبيقها عمليًا.



الوحدة المدمجة crypto والمكتبات



توفر Node.js وحدة مدمجة crypto متوافقة تمامًا مع TypeScript. لتطبيقات المتصفح، يُستخدم Web Crypto API. للمهام الأكثر تعقيدًا، يُوصى باستخدام مكتبة crypto-js التي تعمل في كل من Node.js والمتصفح.



تثبيت الحزم اللازمة:



npm install crypto-jsnpm install @types/crypto-js --save-dev


التشفير المتماثل AES



خوارزمية AES (معيار التشفير المتقدم) هي أشهر تشفير متماثل. تستخدم نفس المفتاح لتشفير وفك تشفير البيانات.



مثال لتطبيق AES-256 في TypeScript:



import CryptoJS from 'crypto-js';

const SECRET_KEY = 'my-strong-secret-key-32chars';

function encryptAES(text: string): string { const encrypted = CryptoJS.AES.encrypt(text, SECRET_KEY); return encrypted.toString();}

function decryptAES(ciphertext: string): string { const decrypted = CryptoJS.AES.decrypt(ciphertext, SECRET_KEY); return decrypted.toString(CryptoJS.enc.Utf8);}

// الاستخدامconst originalText = 'بيانات سرية للحماية';const encrypted = encryptAES(originalText);console.log('مشفر:', encrypted);

const decrypted = decryptAES(encrypted);console.log('مفكوك التشفير:', decrypted);


التشفير غير المتماثل RSA



يستخدم RSA زوجًا من المفاتيح: عام (public) وخاص (private). يُستخدم المفتاح العام لتشفير البيانات، والمفتاح الخاص لفك التشفير. هذا مثالي لنقل البيانات بشكل آمن.



مثال باستخدام crypto من Node.js:



import * as crypto from 'crypto';

function generateRSAKeys(): { publicKey: string; privateKey: string } { const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048, publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' } }); return { publicKey, privateKey };}

function encryptRSA(plainText: string, publicKey: string): string { const buffer = Buffer.from(plainText, 'utf-8'); const encrypted = crypto.publicEncrypt(publicKey, buffer); return encrypted.toString('base64');}

function decryptRSA(cipherText: string, privateKey: string): string { const buffer = Buffer.from(cipherText, 'base64'); const decrypted = crypto.privateDecrypt(privateKey, buffer); return decrypted.toString('utf-8');}

// مثال الاستخدامconst keys = generateRSAKeys();const message = 'رسالة سرية';const encryptedRSA = encryptRSA(message, keys.publicKey);const decryptedRSA = decryptRSA(encryptedRSA, keys.privateKey);

console.log('الأصلية:', message);console.log('مفكوكة التشفير:', decryptedRSA);


تجزئة البيانات



التجزئة هي تحويل أحادي الاتجاه للبيانات إلى سلسلة ذات طول ثابت. على عكس التشفير، لا يمكن عكس التجزئة. الاستخدامات الرئيسية:



  • تخزين كلمات المرور — تخزين تجزئة كلمة المرور بدلاً من كلمة المرور نفسها
  • التحقق من سلامة البيانات — مقارنة تجزئات الملفات
  • التوقيعات الرقمية — تأكيد الهوية


SHA-256



أكثر خوارزميات عائلة SHA-2 شيوعًا:



import CryptoJS from 'crypto-js';

function hashSHA256(data: string): string { return CryptoJS.SHA256(data).toString();}

توصيات