التشفير في C# (.NET): تشفير البيانات وتبخيرها
تتطلب التطبيقات الحديثة على منصة .NET دائمًا حماية البيانات. توفر المكتبة System.Security.Cryptography مجموعة كاملة من الأدوات لتنفيذ عمليات التشفير: من التشفير المتماثل وغير المتماثل إلى التبخير وتوليد التوقيعات الرقمية. في هذه المقالة، سنستعرض الخوارزميات الرئيسية المتاحة في C#، ونعرض أمثلة على استخدامها.
1. الفئات الرئيسية للتشفير في .NET
توجد جميع فئات التشفير في مساحة الأسماء System.Security.Cryptography. الفئات الرئيسية:
- التشفير المتماثل — مفتاح واحد للتشفير وفك التشفير (Aes, DES, TripleDES).
- التشفير غير المتماثل — زوج من المفاتيح: عام وخاص (RSA, ECDiffieHellman).
- التبخير — تحويل البيانات باتجاه واحد (SHA256, SHA512, MD5).
- توليد الأرقام العشوائية — مولد عشوائي آمن تشفيريًا (RandomNumberGenerator).
2. التشفير المتماثل باستخدام AES
خوارزمية AES (معيار التشفير المتقدم) هي أكثر خوارزميات التشفير المتماثل شيوعًا. لاستخدامها في .NET، يتم استخدام الفئة Aes.
مثال على تشفير وفك تشفير سلسلة نصية:
using System;using System.IO;using System.Security.Cryptography;using System.Text;
public class AesExample{ public static byte[] EncryptStringToBytes_Aes(string plainText, byte[] key, byte[] iv) { using (Aes aesAlg = Aes.Create()) { aesAlg.Key = key; aesAlg.IV = iv;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(plainText); } return msEncrypt.ToArray(); } } } }
public static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] key, byte[] iv) { using (Aes aesAlg = Aes.Create()) { aesAlg.Key = key; aesAlg.IV = iv;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { return srDecrypt.ReadToEnd(); } } } } }}الاستخدام:
byte[] key = RandomNumberGenerator.GetBytes(32); // مفتاح 256 بتbyte[] iv = RandomNumberGenerator.GetBytes(16); // IV 128 بت
string original = "بيانات سرية";byte[] encrypted = AesExample.EncryptStringToBytes_Aes(original, key, iv);string decrypted = AesExample.DecryptStringFromBytes_Aes(encrypted, key, iv);
Console.WriteLine($"الأصل: {original}");Console.WriteLine($"تم فك التشفير: {decrypted}");3. التشفير غير المتماثل باستخدام RSA
يستخدم RSA لنقل المفاتيح بأمان أو كميات صغيرة من البيانات. في .NET، يتم تنفيذه بواسطة الفئة RSA.
مثال على توليد المفاتيح والتشفير:
using System;using System.Security.Cryptography;using System.Text;
public class RsaExample{ public static void Demonstrate