بسم الله الرحمن الرحيم
سنشرح في هذا الدرس طريقه بسيطة لتشفير البيانات فأرجو من الله تعالى أن ينال رضاكم
الأمن وتشفير البيانات، هو دائما دور أساسي في صناعة برامج الحاسبات، مما زاد في أهميتهم كثيرا في السنوات الماضية الأخيرة. فهناك طرق عديدة لتشفير البيانات ويأتي مع مكتبة الدوت نت ماهو رائع لعمل تشفير شديد التعقيد ولكن نكتب هنا لمعرفة مبادئ التشفير فأحياناً تكون بحاجة لتتحكم بطريقة التشفير فأتمنى أن يكون هذا عون لنا في ذلك
أولاً يجب على طريقة التشفير التي نكتبها أن تملك طريقة معاكسة أخرى أي إعادة البيانات لما كانت عليه ولنزيد من عدد الإحتمالات التي قد يحاول المخترقون لفك خوارزميات التشفير سنقوم بوضع كلمة سر أي أن التشفير لن يفك إلا بتلك الكلمة
سننشأ طريقة نقوم بتمرير كلمة السر إليها وتعيد لنا بايت لنمرره لي خوارزمية التشفير البسيطة
private static byte GetPassword(string password)
{
//نقوم بتحويل النص إلى مصفوفة من البيتات
byte[] pw = Encoding.Unicode.GetBytes(password);
int sum = 0;
//نقوم جمع البيتات مع بعضها البعض
foreach (byte p in pw)
{
sum += p;
}
//نأخذ البيايت الأول من المتحول ذا الطول 4 بيتات
byte Result = Convert.ToByte(sum % ((int)255));
// نقوم بعملية عكس محتوى البايت عن طريق XOR
Result ^= 255;
return Result;
}وبعد ذلك لم يتبقى علينا سوى طريقة التشفير وفك التشفير
private static byte[] EncodeBytes(string password, byte[] sourceBytes)
{
// نقوم بتحويل كلمة المرور إلى بايت
byte pw = GetPassword(password);
// تهيئ مصفوفة لإستعاب البينات المراد تشفيرها وهنا نلاحظ أننا أضفنا 1لنقوم بحفظ كلمة المرور
byte[] Result = new byte[sourceBytes.Length + 1];
// نقوم بعلم نسخة أخرى لكي لا نؤثر على البيانات الأصلية المررة
Array.Copy(sourceBytes, 0, Result, 1, sourceBytes.Length);
//نقوم بنسخ كلمة المرور على أول بايت ونسطيع هنا تعقيد الأمر قليلاً بأن نحفظ كلمة المرر
// في مكان عشوائي ضمن خوارزمية معينة لنستطيع التعرف عليه في عملية فك التشفير
Result[0] = pw;
// نقوم بالمرور على جميع البيتات ونقوم بعملية قلب البايتات مع كلمة السر
for (int I = 1; I < Result.Length; I++)
{
Result ^= pw;
}
return Result;
}ولم يتبقى علينا سوى عملية فك التشفير
private static byte[] DecodeBytes(string password, byte[] sourceBytes)
{
// نقوم بتحويل كلمة المرور إلى بايت
byte pw = GetPassword(password);
// نقوم بالتحقق من كلمة السر مع ما كنا قدخزناه في البايت الأول في خوارزمية التشفير
if (sourceBytes[0] != pw)
{
return null;
}
// تهيئ مصفوفة لإستعاب البينات المراد تشفيرها وهنا نلاحظ أننا أضفنا 1لنقوم بحفظ كلمة المرور
byte[] Result = new byte[sourceBytes.Length - 1];
// نقوم بعلم نسخة أخرى لكي لا نؤثر على البيانات الأصلية المررة ولكن لاحظ أننا قما بستثناء أول بايت مكان تخزين كلمة السر
Array.Copy(sourceBytes, 1, Result, 0, Result.Length);
// نقوم بالمرور على جميع البيتات ونقوم بعملية قلب البايتات مع كلمة السر لتعود البينات لما كانت عليه
for (int I = 0; I < Result.Length; I++)
{
Result ^= pw;
}
return Result;
}تجريب المثال إخترنا في مثالنا هذا الكونسول لسرعة:
[STAThread]
static void Main(string[] args)
{
string message = "0123456789012345678901234567890123456789 Tarek Najem طارق";
byte[] sourceBytes = Encoding.Unicode.GetBytes(message);
Console.WriteLine("** Phrase to be encoded: " + message);
byte[] encodedBytes = EncodeBytes("JeninNet", sourceBytes);
Console.WriteLine("** Phrase after encoding: " +
Encoding.Unicode.GetString(encodedBytes));
byte[] decodedBytes = DecodeBytes("JeninNet", encodedBytes);
Console.WriteLine("** Phrase after decoding: " +
Encoding.Unicode.GetString(decodedBytes));
Console.WriteLine("Sample ended successfully; " +
"press Enter to continue.");
Console.ReadLine();
}=====================================================
أتمنى من الله التوفيق لكم جميعاً وأن نكون عبارنا عما نريد
=====================================================


