كيفية تشفير وفك تشفير ملف باستخدام Visual Basic .NET


السلام عليكم ورحمة الله
المقالة باللغة العربية :
اليكم مقالة رائعة من مايكروسوفت توضع كيفية تشفير وفك تشفير ملف بإستخدام Visual Basic .NET
مزودة بالمصادر و الاكواد لجميع لغات الدوت نت منMSDN
توضح هذه المقالة كيفية استخدام فئات التشفير التي يتم توفيرها من قبل Microsoft .NET Framework. يمكنك استخدام الفئات التشفير لتشفير ملف نصي إلى حالة غير قابل للقراءة. ثم يمكن فك تشفير الملف النص إلى تنسيقها الأصلي.



uparrow.gif
عودة إلى الأعلى
متطلبات

توضح القائمة التالية الأجهزة الموصى بها برامج البنية الأساسية للشبكة و حزم الخدمات التي يجب أن يكون لديك:
  • Microsoft Windows XP أو Microsoft Windows Server 2003 Microsoft Windows 2000 Professional Microsoft Windows 2000 Server Microsoft Windows 2000 Server، متقدمة أو Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio .NET أو Microsoft Visual Studio 2005
uparrow.gif
عودة إلى الأعلى
استخدام تشفير و إلغاء التشفير

يوفر مساحة الاسم System.Security.Cryptographic في .NET Framework مجموعة متنوعة من الأدوات للمساعدة في التشفير وفي فك التشفير. فئة CryptoStream هي واحدة من العديد من الفئات التي يتم توفيرها. تم تصميم الفئة CryptoStream تشفير أو فك تشفير محتوى كما دفق المحتوى الخروج إلى ملف.

لتشفير ملف اتبع الخطوات التالية:
  1. برنامج تشغيل Visual Studio .NET أو Visual Studio 2005.
  2. إنشاء تطبيق وحدة تحكم جديد في Visual Basic .NET أو في Visual Basic 2005. يتم إنشاء وحدة نمطية لك، مع إجراء Main() فارغ.
  3. استخدم العبارة عمليات الاستيراد حول من مساحة الاسم النظام مساحة الاسم System.Security مساحة الاسم System.Security.Cryptography مساحة الاسم System.Text مساحة الاسم System.IO. يجب إجراء ذلك بحيث لا يلزم تأهيل التعريفات من مساحات الأسماء هذه فيما بعد في التعليمات البرمجية الخاصة بك. يجب استخدام هذه العبارات قبل أي التعريفات الأخرى. Imports System
    Imports System.IO
    Imports System.Security
    Imports System.Security.Cryptography
    Imports System.Runtime.InteropServices
    Imports System.Text
  4. إنشاء مفتاح سري تشفير فك تشفير البيانات. فئة DESCryptoServiceProvider يستند إلى خوارزمية تشفير المتناظر. يتطلب تشفير متماثل والمفتاح خط متجه تهيئة (IV) لتشفير البيانات. لفك تشفير البيانات ، يجب أن يكون لديك نفس مفتاح و IV نفس. يجب عليك أيضاً استخدام خوارزمية تشفير نفس. يمكنك إنشاء المفاتيح باستخدام أي من الطرق التالية:
    • الأسلوب 1 يمكنك مطالبة المستخدم بكلمة مرور. ثم، استخدم كلمة المرور المفتاح و IV.
    • الأسلوب 2 عند إنشاء مثيل جديد من فئات التشفير المتناظر يتم تلقائياً إنشاء مفتاح جديد و IV جديدة من أجل جلسة العمل. يمكن استخدام المفتاح IV التي تم إنشاؤها بواسطة المدارة المتماثل التشفير الفئات لتشفير و لفك تشفير الملف.

      للحصول على مزيد من المعلومات حول كيفية إنشاء توزيع مفاتيح بزيارة موقع Microsoft التالي على الويب أو راجع وثائق مجموعة أدوات (SDK) تطوير برنامج .NET Framework:

      http://msdn.microsoft.com/en-us/library/5e9ft273(VS.71).aspx (http://msdn.microsoft.com/en-us/library/5e9ft273(VS.71).aspx)
  5. إضافة دالة التالية إنشاء مفتاح جديد لجلسة كما هو موضح في "الطريقة الثانية": ' Call this function to remove the key from memory after it is used for security.
    Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" _
    (ByVal Destination As String, ByVal Length As Integer)

    ' Function to generate a key.
    Function GenerateKey() As String
    ' Create an instance of Symmetric Algorithm. The key and the IV are generated automatically.
    Dim desCrypto As DESCryptoServiceProvider = DESCryptoServiceProvider.Create()

    ' Use the automatically generated key for encryption.
    Return ASCIIEncoding.ASCII.GetString(desCrypto.Key)
    End Function
  6. إنشاء أسلوب في الفصل الدراسي المسمى EncryptFile. يجب أن يحتوي أسلوب EncryptFile المعلمات الثلاث:
    • sInputFile
    • sOutputFile
    • sKey (هذا هو المفتاح السري الذي يتم استخدامه لتشفير لفك تشفير الملف.)
    Sub EncryptFile(ByVal sInputFilename As String, _
    ByVal sOutputFilename As String, _
    ByVal sKey As String)
    End Sub
  7. في الإجراء EncryptFile إنشاء كائن يقوم FileStream إدخال والإخراج كائن يقوم FileStream. يمكن القراءة من هذه الكائنات وإعادة كتابتها إلى الملفات الهدف. Dim fsInput As New FileStream(sInputFilename, _
    FileMode.Open, FileAccess.Read)
    Dim fsEncrypted As New FileStream(sOutputFilename, _
    FileMode.Create, FileAccess.Write)
  8. قم بتعريف مثيل فئة DESCryptoServiceProvider. يمثل هذا التشفير الفعلي وتقنية فك التشفير الفعلي المستخدم على الملفات. عند هذه النقطة، يمكنك إنشاء موفر مختلف إذا كنت تريد استخدام الأمان RSA أو آخر تقنية التشفير. Dim DES As New DESCryptoServiceProvider()
  9. يجب توفير موفر خدمات التشفير مع المفتاح السري كـ صفيف من البايت. يوفر مساحة الاسم System.Text دالة يسمى GetBytes(). كجزء من ميزاته الترميز الدالة GetBytes() تأخذ سلسلة ومن ثم إرجاع صفيف من البايت. حجم المفتاح مختلفة بالنسبة لكل أسلوب التشفير. على سبيل المثال، تأخذ مقياس تشفير البيانات "(DES) مفتاح 64 بت يساوي 8 بايت أو 8 أحرف.

    إذا لم تقم بتوفير مفتاح الموفر بشكل عشوائي بإنشاء واحدة. هذا بتشفير الملف بنجاح ولكن لا توجد أية طريقة لفك تشفير الملف. لاحظ أنه يجب أيضاً توفير IV. يتم استخدام هذه القيمة كجزء من التشفير. مثل المفتاح, يتم إنشاء IV بشكل عشوائي إذا لم توفر القيمة. لأنه يجب أن تكون القيم نفسها من أجل التشفير وفك ، يجب أن لا سمحت الجيل عشوائي من هذه القيم. DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
  10. إنشاء مثيل لفئة CryptoStream. استخدام موفر خدمات التشفير إلى الحصول على كائن تشفير (CreateEncryptor) و الموجود لإخراج الكائن يقوم FileStream كجزء من المُنشئ.
    1. Dim cryptostream As New CryptoStream(fsEncrypted, _
      desencrypt, _
      CryptoStreamMode.Write)
    2. قراءة في ملف الإدخال ومن ثم كتابة إلى ملف الإخراج. المرور من خلال الكائن CryptoStream حيث تشفير الملف باستخدام المفتاح الذي قمت بتوفيره.
      Dim bytearrayinput(fsInput.Length - 1) As Byte
      fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
      cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
    فك تشفير ملف "، اتبع الخطوات التالية:
    1. إنشاء أسلوب يسمى DecryptFile. يشبه عملية فك التشفير عملية التشفير. ومع ذلك، لدى DecryptFile اختلافات رئيسية اثنين من الإجراء EncryptFile.
      • يتم استخدام CreateDecryptor بدلاً من CreateEncryptor لإنشاء كائن CryptoStream التي تحدد كيف يمكن استخدام الكائن.
      • عند كتابة النص الذي تم فك تشفيره إلى الملف الوجهة CryptoStream هو الآن مصدر بدلاً من دفق الوجهة.
      Sub DecryptFile(ByVal sInputFilename As String, _
      ByVal sOutputFilename As String, _
      ByVal sKey As String)

      Dim DES As New DESCryptoServiceProvider()
      'A 64-bit key and an IV are required for this provider.
      'Set secret key for DES algorithm.
      DES.Key() = ASCIIEncoding.ASCII.GetBytes(sKey)
      'Set initialization vector.
      DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)

      'Create a file stream to read the encrypted file back.
      Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)
      'Create a DES Decryptor from your DES instance.
      Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor()
      'Create a crypto stream set to read and to do a DES decryption transform on incoming bytes.
      Dim cryptostreamDecr As New CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read)
      'Print out the contents of the decrypted file.
      Dim fsDecrypted As New StreamWriter(sOutputFilename)
      fsDecrypted.Write(New StreamReader(cryptostreamDecr).ReadToEnd)
      fsDecrypted.Flush()
      fsDecrypted.Close()
      End Sub
    2. أضف الأسطر التالية إلى إجراء Main() استدعاء كل EncryptFile و DecryptFile.
      1. Public Sub Main() 'Must be 64 bits, 8 bytes.
        Dim sSecretKey As String

        ' Get the key for the file to encrypt.
        ' You can distribute this key to the user who will decrypt the file.
        sSecretKey = GenerateKey()

        ' For additional security, pin the key.
        Dim gch As GCHandle = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned)


        ' Encrypt the file.
        EncryptFile("%USERPROFILE%\MyData.txt", _
        "%USERPROFILE%\Encrypted.txt", _
        sSecretKey)

        ' Decrypt the file.
        DecryptFile("%USERPROFILE%\Encrypted.txt", _
        "%USERPROFILE%\Decrypted.txt", _
        sSecretKey)

        ' Remove the key from memory.
        ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2)
        gch.Free()
        End Sub


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


تحقق من التي في التشفير و إلغاء التشفير في العمل

اختبار هذه التعليمة البرمجية باستخدام ملف نصي (.txt) للتأكد من أن الملف هذا بشكل صحيح تشفير ثم فك تشفيرها. تأكد من تشفير الملف إلى ملف جديد (كما هو موضح في الإجراء Main() Sub في هذه المقالة) بدلاً من الملف الأصلي. فحص ملف تم فك تشفيره ومقارنة فك تشفير الملف الأصلي.

قائمة رمز اكتمال
Imports System
Imports System.IO
Imports System.Security
Imports System.Security.Cryptography
Imports System.Runtime.InteropServices
Imports System.Text


Module Module1

' Call this function to remove the key from memory after it is used for security.
<DllImport("kernel32.dll")> _
Public Sub ZeroMemory(ByVal addr As IntPtr, ByVal size As Integer)
End Sub

' Function to generate a 64-bit key.
Function GenerateKey() As String
' Create an instance of a symmetric algorithm. The key and the IV are generated automatically.
Dim desCrypto As DESCryptoServiceProvider = DESCryptoServiceProvider.Create()

' Use the automatically generated key for encryption.
Return ASCIIEncoding.ASCII.GetString(desCrypto.Key)

End Function

Sub EncryptFile(ByVal sInputFilename As String, _
ByVal sOutputFilename As String, _
ByVal sKey As String)

Dim fsInput As New FileStream(sInputFilename, _
FileMode.Open, FileAccess.Read)
Dim fsEncrypted As New FileStream(sOutputFilename, _
FileMode.Create, FileAccess.Write)

Dim DES As New DESCryptoServiceProvider()

'Set secret key for DES algorithm.
'A 64-bit key and an IV are required for this provider.
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)

'Set the initialization vector.
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)

'Create the DES encryptor from this instance.
Dim desencrypt As ICryptoTransform = DES.CreateEncryptor()
'Create the crypto stream that transforms the file stream by using DES encryption.
Dim cryptostream As New CryptoStream(fsEncrypted, _
desencrypt, _
CryptoStreamMode.Write)

'Read the file text to the byte array.
Dim bytearrayinput(fsInput.Length - 1) As Byte
fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
'Write out the DES encrypted file.
cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
cryptostream.Close()
End Sub

Sub DecryptFile(ByVal sInputFilename As String, _
ByVal sOutputFilename As String, _
ByVal sKey As String)

Dim DES As New DESCryptoServiceProvider()
'A 64-bit key and an IV are required for this provider.
'Set the secret key for the DES algorithm.
DES.Key() = ASCIIEncoding.ASCII.GetBytes(sKey)
'Set the initialization vector.
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)

'Create the file stream to read the encrypted file back.
Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)
'Create the DES decryptor from the DES instance.
Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor()
'Create the crypto stream set to read and to do a DES decryption transform on incoming bytes.
Dim cryptostreamDecr As New CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read)
'Print out the contents of the decrypted file.
Dim fsDecrypted As New StreamWriter(sOutputFilename)
fsDecrypted.Write(New StreamReader(cryptostreamDecr).ReadToEnd)
fsDecrypted.Flush()
fsDecrypted.Close()
End Sub

Public Sub Main()
'Must be 64 bits, 8 bytes.
Dim sSecretKey As String

' Get the key for the file to encrypt.
' You can distribute this key to the user who will decrypt the file.
sSecretKey = GenerateKey()

' For additional security, pin the key.
Dim gch As GCHandle = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned)


' Encrypt the file.
EncryptFile("%USERPROFILE%\MyData.txt", _
"%USERPROFILE%\Encrypted.txt", _
sSecretKey)

' Decrypt the file.
DecryptFile("%USERPROFILE%\Encrypted.txt", _
"%USERPROFILE%\Decrypted.txt", _
sSecretKey)

' Remove the key from memory.
ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2)
gch.Free()
End Sub

End Module
 


بارك الله بكم على الردود الرائعة والتشجيعة واتمنى أن اكون أفدت المعهد والأعضاء الكرام
 


يسعدك ربي من كل مكروة ..

مجهود مميز وأكثر من رائع ..

أستمر بطرح أبداعاتك معنا ..

//
 
عودة
أعلى