طريقه بسيطة لعمل برنامج تشفير - سي شارب - مقـــالات - Top Coder
Welcome to our Site
الدخــول Or تسجـــيل
الثلاثاء
2016-12-06
1:14 PM
تسجــــيل | دخـــول
الرئيسية » مقالات » سي شارب

طريقه بسيطة لعمل برنامج تشفير
طريقه بسيطة لعمل برنامج تشفير

مقـــدمه
موضوع التشفير من الموضوعات الشيقه والتي لا تنتهي ابدا , حيث لا تنتهي الطرق التي يمكن ابتكارها لعملية التشفير , والمقاله اليوم ستشرح نظاماً بسيطاً للغاية لتشفير النصوص , ومنها يمكنك بنفس المنطق ابتكار طريقتك الخاصه في تشفير نصوصك , او حتى اي بيانات اخرى سواء ملفات او بيانات .
فكرة التشفير


تتلخص فكرة التشفير في وجود نص اصلي نريد تشفيره , يتم تشفيره بنظام معين ليخرج لنا نص مشفر يمكن استرجاعه بنفس النظام , وهذا ببساطة ما يتم في كل انواع التشفيرات المختلفه .

وهناك الكثير من انواع وانظمة التشفير التي تم اختراعها على مدار الزمن , ولعل اشهرها وما نسمع عنه جميع هو جهاز Enigma الذي استخدم في الحرب العالميه الثانيه لتشفير الرسائل العسكريه , ومع ظهور الحاسب انتشر وتوسع نظام التشفير , ويمكنك استخدام احد تلك الانظمة لتشفير ما تشاء , وداخل الدوت نت يوجد اكثر من طريقه لتشفير بياناتك , ولكن ما المانع من اختراع نظام للتشفير خاص بك , الامر ليس بالصعب , ولكن الصعوبه تكمن في مدى امكانيه تعقيد ذلك النظام حتى لا يمكن اختراقه .

عموماً قمنا بعمل نظام تشفير بسيط جداً للنصوص , تقوم فكرته على استبدال الحروف الاصليه بحروف اخرى , ثم عند فك التشفير , نقوم باستبدال الحروف المشفرة بالاصليه مره اخرى .
نظام التشفير
كما نعلم جميعاً ان الحاسب يقوم بتخزين كل البيانات على هيئه Bytes مكونه من 8 ارقام ثنائيه (0 - 1 ) , بحيث يمثل كل بايت حاله من 256 حاله تمثل عشرياً بداية من 0 الى 255 , فكل بايت ما هو الا رقم عشري ينحصر بينهما - وسنستخدم التعبير العشري للتسهيل - , اذاً فنحن لن نتعامل سوى مع 256 حاله فقط , تتضمن تلك الحالات كل الحروف والعلامات الموجوده , فمثلا حرف A يمثل عشريا 97 , و حرف ال B يمثله 98 وهكذا , فكل حرف او رقم او علامة تمثل برقم عشري - له اصل ثنائي - , فماذا لو قمنا بتبديل تلك الارقام باخرى ؟! , بمعنى مثلاً لو كان النص الاصلي هو A , فلو استبدلناه باي حرف اخر , B مثلاً فهذا يعتبر تشفير !! , نعم تشفير , ففكرة التشفير هي تغيير البيانات الاصليه ببيانات اخرى , اذا فنحن سنستبدل البايت 97 ببايت 98 , وعند فك التشفير سنعكس العمليه , فنستبدل كل بايت 97 ببايت 98 , ليخرج لنا النص الاصلي فمثلا
Ahmed عند تشفيرها تصبح Bhmed ثم نسترجعها لتصبح Ahmed
ولنأخذ حرفاً اخر مثلا M = 109 , نعطي لها قيمة مشفرة Q = 112 , فعند تطبيقها على المثال السابق يصبح هكذا
Ahmed مشفرة تصبح Bhqed
ربما بدأت تختفي معالم الكلمه تماماً , ودعنا نزيد من تشفيرنا , ولنستبدل كل من a = b و h = l و m = q  و e = f و d = e , فعند تطبيق تلك الشفرة تصبح هكذا
ahmed مشفره blqfe
وقد اختفت تماماً الكلمة الاصليه ! , فالنص الاصلي ( ahmed ) تحول الى نص اخر تماما ( blqfe ) , ولم يعد النص مفهوما , او على الاقل لم يعد يعبر عن معناه الاساسي , ولا يمكن ان نفهم معنى تلك الكلمة الا اذا قمنا بفك الشفرة واعادتها مره اخرى , وليتم فكها فلابد من تبديل الحروف المشفره بالحروف الاصليه , ومنطقياً لا يمكن ان يفكها سوى من شفرها , فهو يعرف اصل كل حرف مشفر , وهو ما يمثل نظام التشفير , فهو من قام بالتشفير وسيقوم لاحقا بفك التشفير .

ودعنا نقوم بعمل نظام تشفير بنفس المنطق السابق , بحيث ان لدينا 256 بايت , يمكن تبديلهم جميعا الى حالات اخرى , فمثلا نجعل 2 = 154 , و 254 = 80 , وهكذا حتى نكمل تبديل ال 256 جميعهم - بشرط عدم تكرار الرقم المشفر مع اكثر من بايت - قم نقوم بتبديل ما لدينا من نصوص او بيانات وفق هذا النظام , فلو ادخلنا ما نريد من نصوص فستتحول الى شئ اخر تماما , وعند الحاجة نعيد فك التشفير بنفس النظام , وهكذا نكون قد بنينا نظام تشفير خاص بنا , نستطيع من خلاله تشفير بياناتنا .
عمل نظام تشفير
سنقوم الان يعمل نظام تشفير جديد , بحيث نستبدل ال 265 حاله , باضافه القيمة 77 الى كل الحالات , بحيث تصبح الحاله 0 = 77 , والحاله 5 = 82 ( 5 + 77 )  وهكذا حتى نصل الى القيمة 178 =255 ( 178 + 77 ) , وهي اقصى قيمة يمكن ان يمثلها البايت الواحد , اما باقي القيم ( 179 : 255 ) - وهي القيم الاصليه - ستبدأ من الصفر , بحيث 179 = 0 ( 179 + 77 - 256 ) , 180 = 1 ( 180 + 77 - 256 ) وهكذا , وبهذه المعادلات نكون قد انشأنا نظاما بسيطا للتشفير , ولابد من ان يكون هذا النظام مخرن حتى يمكن الرجوع اليه في كلا من عمليتي التشفير وفك التشفير .

و في الكود التالي نشرح كيفية عمل هذا النظام وتخزينه في كائن Dictionary  , وهو كلاس مفيد جدا في تلك العمليه , حيث ان يحتوي على keys , values , وهذا هو الكود :
Make the Code
 
حيث ان الكلاس Dictionary يحتوي على زوج من القيم , احدهما يسمى key والاخر يسمى value , وكأنك تقوم بعملية فهرسه لبياناتك , بحيث تضع مفتاح لكل قيمة داخل هذا ال Dictionary , بحيث يمكنك استرجاع القيمة من خلال المفتاح الخاص بها , وقد وضعنا قيمة البايت الاصلية كمفتاح للقيمة المشفرة , فمثلاً المفتاح 0 يشير الى القيمة المشفرة 77 , والمفتاح 255 يشير الى القيمة 76 , وهكذا , وقد تم تسجيل تلك القيم من النوع byte حيث انها تقبل قيم من 0 : 255 , وايضاً تحول الى انواع اخرى بسهوله , وقد تم عمل المعادلات الخاصه بنظام التشفير , وهذا يعتبر نظام تشفير بسيط جدا , وليس به اية تعقيدات , ولكنه لتبسيط الموضوع .
Encoding  
والان اصبح لدينا نظام تشفير خاص بنا , فيمكننا الان ان نشفر بياناتنا ونسترجعها من خلاله , وسنبدأ بعملية التشفير .
سيقوم هذا النظام بتشفير النصوص التي نعطيها له , ويحولها الى شئ اخر , حيث سيقوم باستبدال كل حرف من النص الاصلي بالحرف المقابل له في نظام التشفير الذي تم صنعه وتخزينه في Code , والكود التالي يشير الى دالة التشفير باستخدام هذا النظام :
Encode Method
 
حيث تقوم هذه الداله بحمل النص الاصلي ,  وتقوم بالمرور على كل حرف char من حروف النص , ثم تحوله الى قيمة byte اي تحوله الى رقمه الاصلي كبايت , ثم تأتي بالقيمة المشفره value من النظام , حيث تكون قيمة الحرف الاصلي كبايت مفتاح key للقيمة المشفره المقابله له value , ومن ثم يتم اخذ القيمة المشفره - وتكون ممثله في رقم byte - وتحويلها الى حرف char ثم اضافتها الى النص المشفر , الذي تقوم الداله في النهايه بارجاعه  
Decoding
والان انتهينا من عملية التشفير , والمهمه الان تتمثل في كيفية استرجاع النص الاصلي لهذا النص المشفر , ودعنا نضع امامنا دائما نظام التشفير الذي تم بناءه , فلدينا مفتاح لكل قيمة مشفره , فاذا كانت لدينا القيمة المشفره , سيكون النص الاصلي الخاص بها يمثله مفتاحها في النظام , فلو توصلنا لمفتاح كل قيمة مشفره , فنحن توصلنا لفك الشفره , والداله التاليه تقوم بفك التشفير :
Decode Method
 
حيث في سبيل التوصل لمفتاتيح القيم في النظام , وضعنا كل القيم داخل List , بحيث نستطيع حلب المفتاح عن طريق index كل قيمة , حيث ان نظامنا يبدأ من القيمة 77 , وينتهي بالقيمة 76 , وفي الليست يكون index القيمة 77 هو 0 , وهو ما يمثل مفتاحها الاصلي لو رجعت لنظام التشفير , وتكون index القيمة 76 هو 255 , وهو ايضا مفتاح تلك القيمة في نظام التشفير , ثم بعد ذلك نقوم بنفس العملية السابقه في التشفير من حيث تحويل الرقم الى حرف , ثم اضافته الى النص الذي تقوم الداله في النهايه بارجاعه .
ختــــــــام
في النهايه نكون بخطوات بسيطه بنينا نظام للتشفير , وهو بالطبع ليس نظاما قويا او مثاليا , لكنه شرح المبادئ والخطوط العريضه لتلك العمليه , فكل انظمة التشفير تسير على هذا المنوال , نظام تشفير مرجعي لعمليتي التشفير و فك التشفير , ثم طريقه لاستخدام هذا النظام في العمليتين المختلفتين , ويمكنك الان ان تعكف على ابتكار نظامك الخاص , اصنع معادلات معقدة كما تشاء , اجعل نظام التشفير عشوائيا في كل مره , افعل ما تشاء , المهم ان يكون نظامك صالح للتطبيق , فحتى مع النظام البسيط الذي صنعناه يمكنك تشفير ملفاتك الخاصه , فالملفات ما هي الى مصفوفة من البايتات , يمكنك تبديل كل بايت في الملف بالبايت المقابل له في المصفوفه , لينتج لك ملفاً مشفرا , وفي النهاية تفك الشفرة بنفس النظام .
تحميل المشروع
 Written by :  Mohammed Mahmoud
الفئة: سي شارب | أضاف: ham_mody2000 (2011-09-17 5:22 AM)
مشاهده: 5691 | الترتيب: 0.0/0


أترك تعليقك من خلال حسابك على الفيس بوك

تعليقات مشتركي الموقع

مجموع المقالات: 0
إضافة تعليق يستطيع فقط المستخدمون المسجلون
[ التسجيل | دخول ]
طريقة الدخول
بحث
Our Facebook community

تم إطلاق صفحة توب كودر على الفيس بوك

Advertisment
الأحـــدث
hitstatus
Copyright Mohammed Mahmoud © 2016
إنشاء موقع مجاني с uCoz