الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تشفير البيانات

مغلق
بدأه TarekNajem04 في 2 ديسمبر 2005 · 18 رد · 2,746 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

سنشرح في هذا الدرس طريقه بسيطة لتشفير البيانات فأرجو من الله تعالى أن ينال رضاكم

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

أولاً يجب على طريقة التشفير التي نكتبها أن تملك طريقة معاكسة أخرى أي إعادة البيانات لما كانت عليه ولنزيد من عدد الإحتمالات التي قد يحاول المخترقون لفك خوارزميات التشفير سنقوم بوضع كلمة سر أي أن التشفير لن يفك إلا بتلك الكلمة

سننشأ طريقة نقوم بتمرير كلمة السر إليها وتعيد لنا بايت لنمرره لي خوارزمية التشفير البسيطة

    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();
    }

=====================================================

أتمنى من الله التوفيق لكم جميعاً وأن نكون عبارنا عما نريد

=====================================================

Crypt.rar

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#2

اخي الحبيب

ما هي المكتبات التي استخدمتها

using what ??

لانه يضررب معي عند encodig في الpassword function

كما ان الملف المرفق لا يعمل يببدو لي انك عملته على .net 2005

#3

System.Text

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#4

لم أستخدم أي من المكتبات ولكن قمت بإنشائة Microsoft Visual C# 2005 Express Edition

إذا كنت تملك نسخة 2003 قم بإنشاء مشروع جدد وأضف عليه جميع الملفات التي سحتويها المسروع السابق الت تنتهي بـ CS.*

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#5

لقد عمل

و قد جربته على ال asp.net

جزيت خيرا

#6

أتمنى لجميع التوفيق

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#7

سؤال سريع

كم بايت يكون ناتج ال encoding ؟؟؟

#8

هو حجم البيانات الأصلي مضاف عليه بايت في أول المصفوفة لتخزين كلمة السر

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#9

الاخ الفاضل طارق موضوع مختصر وسلس ومفهوم

جزاك الله عنا كل خير

اخوك

ibn_als3odiah

3424.gif
#10

لا قصدي عندما ادخل كلمه سر مثل (سييييييي)

فيتم تحويلها الى مصفوفه من ال بايت(encoding)

كم حد هذا الاري و هل يمكن ان احددهبحجم معين مثل(32 بايت)

#11

بسم الله الرحمن الرحيم

هذا مثال بسيط لنتعلم كيفية تشير البيانات يعني لا يهمني طول كلمة المرور لأنننا نقوم بعملية جمع جميع البايتات ومن ثم نقوم بأخذ أول بايت تستطيع أن تقوم ببعض التعديلات على هذه الخوارزمية لتخفيف بعض عيوبها

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#12

اخي الحبيب

انا عندي database اريد ان اضع بها الencryption code

و مساحه الfield هي 32 بايت فرضا

فلو عملت encryption لكلمه و كان الناتج 64 بايت سيضرب بالdatabase

فاريد ان احدد

#13

بسم الله الرحمن الرحيم

يا أخي أول شئ لم أستطيع أن أفهم ما تريد

ثانيا:ً أي حقل تقوم بإنشائة في DataBase يكون حجمه 256 فأرجون أن تضع دائماً حجم البيانات 256 إلا إذا كانت غايتك هي التحقق فقط لأن تحديد حجم Field مثلاً 32 هي عملية من أحد عمليات التحقق التي يجريه محرك الـ Database أي لا تظن أنك سوف تقوم بتقليل حجم البينات

أرجو توضيح سؤالك مره أخرى

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#14

عذرا للتاخير

اخي الحبيب

في ال data base عندي نوع المعلومات من نوع varChar داخل sql server

و بالتالي لا تحتمل الا 32 بايت

#15

بسم الله الرحمن الرحيم

أخي العزيز هل قمت بتجريب هذه الخورزمية على بياناتك فإذا لا قم بعمل مثال ثم أعمل وأكتبه في مشاركة آخرى حتى نعرف ما هو الخطأ

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#16

موضوع مفيد ومشروح بطريقة بسيطة

براك الله فيك

My_Sign.jpg
#17

جزاك الله خيرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#18

أخي شكراً جزيلاً على هذا الكود

لقد أستخدمه بنجاح

ولكن بصراحة لدي بعض الأسئلة .. ولا أحب أن أستخدم شيئاً وأنا لا أفهم بعض مافيه

الأسئلة:

اقتباس
byte Result = Convert.ToByte(sum % ((int)255));

// نقوم بعملية عكس محتوى البايت عن طريق XOR

Result ^= 255;

1) لم أفهم هاذان السطران وخاصةً لم 255 ؟ هل لأنه سيكون بالبايت 11111111 ؟ وماالحاجة من قلب الباسورد ؟

2) لم sum % ((int)255 هذا ؟

أعتذر على أسئلتي ولكن هذا جديد بالنسبة لي وأود فعلا أن أفهم

#19

الموضوع مضى عليه أكثر من سنة

هذا الموضوع مغلق.

مواضيع مشابهة