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

درس/التشفير فى vb.net

مغلق
بدأه SOLO.NET في 15 أكتوبر 2005 · 26 رد · 17,840 مشاهدة · في قسم الدروس والمواضيع المتميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

المقدمة

يعتبرالأمان شئُ رئيسيُ للعديد مِنْ التطبيقاتِ. عملية التحقُّقِ والتفويضِ للمستخدمين فى التطبيقات جزء من الأمنِ العامِّ.

ولكن ماذا عن البيانات المستخدمة والتى يتم ارسالها من والى التطبيقِ؟ فهى فى هذه الحالة تكون معرضة للتجسس وسرقة.

فهنا تبرز اهمية تشفير البيانات, علم التشفير موضوع ضخم لوحده. وفى هذا الدرس سنقوم فقط بشرح كيفية التشفير فى .NET FrameWork

***********************************************************

لماذا نستخدم التشفير؟

فى اغلب التطبيقات يتوفر فيها الامان عن طريق شاشات الدخول واعطاء الصلاحيات لكل مستخدم . على أية حال، ماذا لو أنّ شخص ما إعترضَ البياناتَ المرسلة عبر الشبكة؟(بواسطه اى اداة لمراقبة الشبكة او برامج sniffer) ماذا لو أنّ شخص ما تلاعب بالبياناتِ التي تُرسَلُ على الشبكةِ؟ ماذا لو أنّ شخص ما فَتحَ قاعدةَ بيانات sql server التي تَخْزنُ كلماتَ السر؟

الحل هو تشفير البيانات

.NETFramWork يعطيك فئات عن طريقها تُشفّرَ encryptالبياناتَ التي ترسل في نظامِكِ أَو شبكتِكِ وبعد ذلك تفك التشفير decrypt فقط للمستخدم المخول بالتعديل او القراءة. باختصار التشفير يزودنا بالميزّاتَ تاليةَ:

حماية البياناتَ المرسلة مِنْ القراءة من طرف ليس مخول

حماية البياناتَ المرسلة مِنْ أيّ تعديل

التأكّدْ بأنّ البياناتِ تَصِلُ مِنْ المكان الصحيحِ

***********************************************************

أنواع فئات التشفير:

وهى تصنف الى اربع انواع

1-الفئات التي تَتعاملُ مع المفتاح السرى (يسمى التشفير المتناظر Symmetric Cryptography)

2-الفئات التي تَتعاملُ مع المفتاح العامِّ ( يسمى التشفير الغير متناظرAsymmetric Cryptography)

3-الفئات التي تَتعاملُ مع التواقيعِ الرقميةِ (cryptographic signatures)

4-الفئات التي تَتعاملُ مع الارقام المختلطة المشفّرةِcryptographic hashes

كل هذه الفئات تجدها فى فضاء الاسماء التالى:

System.Security.Cryptography

اولا

التشفير المتناظر

في التشفير المتناظر(المفتاح السرى)، البيانات المحمية تكون مشفرة باستخدام مفتاح سري وحيد. هذا المفتاح معروف فقط للمرسل والمستلم. يشفّر المرسل البيانات باستعمال المفتاح السري. المستلم يفك تشفير البيانات باستخدام نفس المفتاح السري. ومن الهم جدا اخفاء المفتاح السرى لان اى شخص يحصل عليه يصبح قادر على فك التشفير

اطار العمل يوفر الفئات التالية للتعامل مع التشفير المتناظر:

 DESCryptoServiceProvider

 RC2CryptoServiceProvider

 RijndaelManaged

 TripleDESCryptoServiceProvider

وفى هذا المثال سنشرح كيفية التشفير المتناظر باسخدام Triple-DES algorithm

System.Security.Cryptography namespace يحتوي على الفئة TripleDESCryptoServiceProvider الذي يوفر امكانية تشفير البيانات بخوارزميةTriple-DES.

يحتاج التشفير المتناظر لتشفير البيانات:

1- مفتاح سري A secret key

2-موجه تهيئةAn initialization vector

تستخدم خوارزميات التشفير سلسلة من التقنيات لتشفير البيانات. في هذه التقنية، كامل البيانات الّتي ستشفّر تقسم الى كتل صغيرة. الكتلة المشفّرة سابقا من البيانات تستعمل لتشفير الكتلة الحالية وتتكررالعملية.

The Initialization Vector (IV) يستعمل لتشفير ووفك تشفير الكتلة الأولى للبايتات. بهذا يضمن عدم تكرار الكتل المشفرة

لإستعمال TripleDESCryptoServiceProvider، مفتاح التشفير يجب أن يكون من حجم24 بايت وموجه التهيئة يجب أن يكون من 8 بايت.

مثال لاستخدام الفئةTripleDESCryptoServiceProvider

هذا هو الكود

Imports System.Security.Cryptography
Imports System.IO
Imports System.Text

Public Class SecurityHelper
    Public Key() As Byte
    Public IV() As Byte

    Public Function Encrypt(ByVal strData As String) As Byte()
        Dim data() As Byte = ASCIIEncoding.ASCII.GetBytes(strData)
        Dim tdes As TripleDESCryptoServiceProvider = New  TripleDESCryptoServiceProvider
        If Key Is Nothing Then
            tdes.GenerateKey()
            tdes.GenerateIV()
            Key = tdes.Key
            IV = tdes.IV
        Else
            tdes.Key = Key
            tdes.IV = IV
        End If
        Dim encryptor As ICryptoTransform = tdes.CreateEncryptor()
        Dim ms As New MemoryStream
        Dim cs As CryptoStream = New CryptoStream(ms, encryptor, CryptoStreamMode.Write)
        cs.Write(data, 0, data.Length)
        cs.FlushFinalBlock()
        ms.Position = 0
        Dim result(ms.Length - 1) As Byte
        ms.Read(result, 0, ms.Length)
        cs.Close()
        Return result
    End Function

    Public Function Decrypt(ByVal data() As Byte) As String
        Dim tdes As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider
        tdes.Key = Key
        tdes.IV = IV
        Dim decryptor As ICryptoTransform = tdes.CreateDecryptor()
        Dim ms As New MemoryStream
        Dim cs As CryptoStream = New CryptoStream(ms, decryptor, CryptoStreamMode.Write)
        cs.Write(data, 0, data.Length)
        cs.FlushFinalBlock()
        ms.Position = 0
        Dim result(ms.Length - 1) As Byte
        ms.Read(result, 0, ms.Length)
        cs.Close()
        Return ASCIIEncoding.ASCII.GetString(result)
    End Function

end class

شرح الكود:

قمنا بانشاء فئة واسميناها SecurityHelper وهى تحتوى على متعيرين عامين من النوع byte array والذين يمثلان المفتاح السرى والموجه وكذلك يوجد به دالتين الاولى لتشفير البيانات والثانية لفك التشفير

داله التشفير تستقبل نص لتشفيره وتعود بقيمة من النوع byte array تمثل النص المشفر

وفى هذه الداله قمنا اولا بتعريف متغير من نوع byte array ووضعنا به النص المراد تشفيره بعد تحويله الى bytes باستخدام الطريقة GetBytes()

ثم انشئنا كائن من الفئة TripleDESCryptoServiceProvider

وبعدين نختبر اذا كان المستخدم اعطى قيمة للمفتاح والموجه فاذا لم يفعل نقوم بتوليدها عن طريق الفئة TripleDESCryptoServiceProvider

عرفنا متغير من الواجهه ICryptoTransform وهى تعرف العمليات الاساسية للتشفير واسندنا لها القيمة الناتجة من الطريقة CreateEncryptor()

عرفنا كائن من النوع MemoryStream حيث سنقوم بكتابة البيانات المشفرة اليه ويمنك استخدام FileStream لتخزين البيانات على الهارد

ا عرفنا كائن من النوع CryptoStream ومررنا له MemoryStreamو ICryptoTransformالسابق انشائه ونمطه وهو هنا write

ثم قمنا بكتابة البيانات لتشفيرها بالكائن CryptoStream الذى يحتفظ بهذه البيانات فى الذاكرة بواسطةالكائن MemoryStream

اخيرا قمنا بقراءة البيانات المشفرة من الmemorystream ووضعها فى متغير من byte array وهى القيمة

التى تعود بها الدالة

الان اصبح بامكانك تطوير هذه الفئة واستخدامها فى تطبيقاتك لتشفير كلمات السر والبيانات المهمه

***********************************************************

ساقوم بشرح الطرق الاخرى للتشفير فى وقت لاحق باذن الله تعالى.

كما ارجو تنبيهى على اى اخطاء وما توفيقى الا بالله

ملاحظة مثال موجود بالمرفقات

cryptography2.zip

تم تعديل هذه المشاركة بواسطة SOLO.NET في 15 أكتوبر 2005 في 17:09

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#2

جزاك الله خيرا أخ عبد الخالق , أنا لم أقرأه بتمعن لأني مشغول ,

ولكن يبدو ان الدرس رائع جدا ,كما أن موضوع التشفير من المواضيع غير المطروقه ,

وخصوصا ان القسم اليومين دول نايم ... :( :( :( خخخ ,,,

#4
اقتباس
جزاك الله خيرا أخ عبد الخالق , أنا لم أقرأه بتمعن لأني مشغول ,

ولكن يبدو ان الدرس رائع جدا ,كما أن موضوع التشفير من المواضيع غير المطروقه ,

وخصوصا ان القسم اليومين دول نايم ...    خخخ ,,,

واياك كل الخير اخى حزووم ومش عارف ليش القسم فى حاله سبات

شكرا لمرورك اخ اياس

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#5

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

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#6

واياك كل الخير اخ محمد

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#7
اقتباس
جزاك الله خيرا أخ عبد الخالق , أنا لم أقرأه بتمعن لأني مشغول ,

منتضرين البقية :rolleyes:

#8

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

احنا مستنيين الباقى والف شكر يا باشا

#9
اقتباس
جزاك الله خيرا

احنا مستنيين الباقى والف شكر يا باشا

واياكم كل الخير وغدا إن شاء الله اكمل البقية

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

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#10

طيبلن ألف و أدور..صحيح إني لم أفهم الكود جيدا..ولكن أخي الكريم نحن أين شفرنا الText يعني نحن من ماذا حيناها..أقصد طالما أننا لم نرسل اي معلومة خارج البرنامج..

وشكرا لك جدا

#11
اقتباس
طيبلن ألف و أدور..صحيح إني لم أفهم الكود جيدا..ولكن أخي الكريم نحن أين شفرنا الText يعني نحن من ماذا حيناها..أقصد طالما أننا لم نرسل اي معلومة خارج البرنامج..

وشكرا لك جدا

اخى اياس داله التشفير تعود بمصفوفة من byte() وهى تمثل النص بعد تشفيره حيث قمنا بقرائتها من الMemoryStreamوهو الذى وضعنا فى النص المشفر

ووضعناه فى المتغير result الذى تعود به الداله وبعدين تقدر ترسل النص مشفرا الى قاعدى بيانات مثلا او اى تطبيق اخر

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#12

أن منتظر التشفير بالمفتاح العام والخاص

وشكراً

#14

السلام عليكم و رحمة الله و بركاته

كيف نستطيع التحكم في البتات الخاصة بالتشفير بما معنه أني أريد تشفير 100 بيت أو 10000 بيت فكيف ؟

أخوك عمرو عيسي

#15
اقتباس
كيف نستطيع التحكم في البتات الخاصة بالتشفير بما معنه أني أريد تشفير 100 بيت أو 10000 بيت فكيف

ااخ عمرو لم افهم ما تقصده بهذا السؤال هل تقصد قوة التشفير وهذا يعود للخوارزمية التى تشفر بها

يارريت توضح سؤالك اكثر :o

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#16

السلام عليكم و رحمة الله و بركاته

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

أخوك عمرو عيسي

#17
اقتباس
رالسلام عليكم و رحمة الله و بركاته

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

أخوك عمرو عيسي

اخى الكريم نحن لم نقم بعمل اى خوارزمية للتشفير وهذا علم ضخم لوحده ويخص علماء الرياضيات بالمقام الاول

كل ما قمنا به هو استخدام خوارزميات جاهزه ويغلفها الدوت نت

فانت كمبرمج ومطور لا يهمك بالمقام الاول تركيب الخوارزمية ولكن المهم كيف استخدامها لحمياية بياناتك

اتمنى لك التوفيق

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#18

جزاك الله كل خير وثبت خطاك وانار طريقك وزادك علماً

#19

مساء الخير :::...

شكرا لك يا اخي علي الطريقة والكود

#20

سؤال لو سمحت أخ SOLO.NET

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

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

Dim buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(TextBox1.Text.ToCharArray)

و لكنه يعطيني خطأ عند إعادة البيانات أي Decrypt و هو

Length of the data to decrypt is invalid.

و لاحظت أن حجم المصفوفة بعد التشفير لا يساوي حجمها عند تحويلها من النص بالكود السابق فقد كان حجمها بالألاف ثم أصبح عندما حولتها لا تتعدى المئة

ما الحل و شكرا جزيلا لك

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#21

شكرا أخي :D SOLO.NET على هذا المجهود الرائع

ولكن هناك برامج تقوم بفك شفرة البرنامج المصدرية بلغتها الأصلية أو بلغة الإسمبلي :unsure:

:( هذه المشكلة خطيرة على كل :( مبرمج

#22

واو موضوع ممتاز

يعطيك العافية أخي Solo.Net

وفوق كل ذي علم عليم

http://www.leaderstechnology.com

-------------------------------

#23

شكرا على هذا الموضوع الرائع الرجاء عدم التوقف والاستفاضة ولكم جزيل الشكر

#24

جزاك الله خيرا وبارك الله فيك

#25

مشكور عزيزي Solo.Net وهذا موضوع مهم وفي الحقيقة لم أعرفه ويريد مزيدا من التوضيح والشرح بالتفصيل أكثر لمعرفة كيفية التشفير ومتى نقوم بالتشفير ونوع التشفير الذي استخدمه فإن كان لديك الدراية بذلك فإننا نأمل ان تفي بوعدك وتزيدنا من هذا الشرح

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

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

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