أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية تشفير وفك تشفير ملف باستخدام Visual C #

هام: تمت ترجمة هذه المقالة باستخدام برامج مايكروسوفت للترجمة الآلية ومن المحتمل ان يتم تحريرها او تدقيقها بعد ذلك من خلال تكنولوجيا منصة مجموعات الترجمة(CTF) او من خلال مترجم بشري. تقدم لك شركة مايكروسوفت هذه المقالات المترجمة بشكل آلي او بالترجمة البشرية او بعد تحريرها وتدقيقها من قبل مجموعات الترجمة حتى تمكنكم من الوصول إلى جميع المقالات الموجودة في قواعد المعرفة لديها بلغات مختلفة. إلا أن المقالات المترجمة قد تحتوي على أخطاء في المفردات او بناء الجمل او النحو. وعليه، فإن شركة مايكروسوفت ليست مسؤولة عن اية أخطاء او عدم دقة في الترجمة او أية أضرار قد تحدث نتيجة أخطاء في ترجمة محتويات النص او استخدامه من قبل العملاء.

اضغط هنا لرابط المقالة باللغة الانجليزية307010
للحصول على إصدار Microsoft Visual Basic.NET من هذه المقالة، راجع 301070.
تشير هذه المقالة إلى مكتبة فئات Microsoft.NET Framework مساحات الأسماء التالية:
  • System.IO
  • System.Security
  • System.Security.Cryptography
ملاحظة: لا تنطبق هذه المقالة على Microsoft.NET Framework 2.0.
الموجز
توضح هذه المقالة كيفية استخدام فئات التشفير التي يتم المتوفرة من قبل Microsoft.NET Framework لتشفير ملف نص إلى حالة غير قابل لقراءة ومن ثم لفك تشفير هذا الملف النصي إلى تنسيقها الأصلي.

متطلبات

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

التشفير وفك التشفير

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

تشفير ملف

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

      لمزيد من المعلومات حول كيفية إنشاء وتوزيع المفاتيح، راجع وثائق SDK Microsoft.NET Framework أو راجع موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:
  5. إضافة دالة التالية إنشاء مفتاح جديد أسيسيون (كما هو موضح في "الطريقة الثانية" من الخطوة 4):
    //  Call this function to remove the key from memory after use for security.[System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]public static extern bool ZeroMemory(ref string Destination, int Length);		// Function to Generate a 64 bits Key.static string GenerateKey() {	// Create an instance of Symetric Algorithm. Key and IV is generated automatically.	DESCryptoServiceProvider desCrypto =(DESCryptoServiceProvider)DESCryptoServiceProvider.Create();	// Use the Automatically generated key for Encryption. 	return ASCIIEncoding.ASCII.GetString(desCrypto.Key);}
  6. إنشاء أسلوب في الفئة الخاصة بك يسمى EncryptFile. يجب أن يكون فئة EncryptFile المعلمات الثلاث التالية:
    • سينبوتفيلينامي
    • سوتبوتفيلينامي
    • سكي (المفتاح السري المستخدمة لتشفير وفك تشفير الملف.)
    static void EncryptFile(string sInputFilename,		string sOutputFilename,		string sKey)					
  7. إنشاء كائن FileStream إدخال وإخراج في الإجراء EncryptFile ، كائن FileStream . يمكنك القراءة من هذه الكائنات وكتابة تارجيتفيليس.
    FileStream fsInput = new FileStream(sInputFilename, 				FileMode.Open, 				FileAccess.Read);FileStream fsEncrypted = new FileStream(sOutputFilename, 				FileMode.Create, 				FileAccess.Write);					
  8. تعريف مثيل من فئة ديسكريبتوسيرفيسيبروفيدير . يمثل هذا التشفير الفعلي والتقنيات أكتوالديكريبشن المستخدمة في الملفات. عند هذه النقطة، يمكنك createa موفر مختلف إذا كنت تفضل استخدام RSAsecutiry أو كريبتوجرافيكتيتشنيك آخر.
    DESCryptoServiceProvider DES = new DESCryptoServiceProvider();					
  9. يجب توفير موفر التشفير بالمفتاح يورسيكريت كمصفوفة من وحدات البايت. توفر مساحة الاسم System.Text دالة تسمى GetBytes(). كجزء من ميزاته الترميز، الدالة GetBytes() يأخذ سلسلة وثم إرجاع صفيف من البايت. يختلف ثيسيزي مفتاح لكل أسلوب التشفير. على سبيل المثال، يأخذ مقياس تشفير البيانات (DES) مفتاح 64 بت التي تساوي 8 بايت أو 8 أحرف.

    إذا لم تقم بتوفير مفتاح راندومليجينيراتيس موفر واحد. وهذا يقوم بتشفير الملف بنجاح ولكن هناك لا توديكريبت طريقة الملف. لاحظ أنه يجب أيضا توفير vector(IV) التهيئة. يتم استخدام هذه القيمة كجزء من التشفير. مثل المفتاح، إيسراندوملي IV إنشاء إذا لم تقم بتوفير القيمة. لأن القيم يجب أن بيته نفس للتشفير وفك التشفير، يجب أن لا تسمح راندومجينيريشن من هذه القيم.
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);					
  10. إنشاء مثيل لفئة CryptoStream باستخدام موفر التشفير للحصول على انكريبتينجوبجيكت (كريتينكريبتور) والموجودة على إخراج الكائن FileStream كجزء من الدالة الإنشائية.
    ICryptoTransform desencrypt = DES.CreateEncryptor();CryptoStream cryptostream = new CryptoStream(fsEncrypted, 					desencrypt, 					CryptoStreamMode.Write);					
  11. قراءة في ملف الإدخال، ومن ثم كتابة إلى outputfile. المرور من خلال الكائن CryptoStream حيث تم تشفير الملف باستخدام المفتاح يوبروفيديد ذلك.
    byte[] bytearrayinput = new byte[fsInput.Length - 1];fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);					

فك تشفير ملف

لفك تشفير ملف، اتبع الخطوات التالية:
  1. إنشاء أسلوب وقم بتسميتهديكريبتفيلي. يشبه عملية فك التشفير عملية ثينكريبشن، ومع ذلك، الإجراء DecryptFile اختلافات رئيسية بين من إجراء EncryptFile .
    • يتم استخدام كريتيديكريبتور بدلاً من كريتينكريبتور لإنشاء كائن CryptoStream ، الذي يحدد كيفية استخدام الكائن.
    • عند كتابة النص غير مشفر إلى الملف الوجهة، الكائن CryptoStream هي الآن المصدر بدلاً من دفق الوجهة.
    static void DecryptFile(string sInputFilename, 	                string sOutputFilename,	                string sKey){	DESCryptoServiceProvider DES = new DESCryptoServiceProvider();	//A 64 bit key and IV is 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.	FileStream fsread = new FileStream(sInputFilename, 		                           FileMode.Open, 		                           FileAccess.Read);	//Create a DES decryptor from the DES instance.	ICryptoTransform desdecrypt = DES.CreateDecryptor();	//Create crypto stream set to read and do a 	//DES decryption transform on incoming bytes.	CryptoStream cryptostreamDecr = new CryptoStream(fsread, 		                                         desdecrypt,		                                         CryptoStreamMode.Read);	//Print the contents of the decrypted file.	StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);	fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());	fsDecrypted.Flush();	fsDecrypted.Close();}					
  2. أضف الأسطر التالية إلى الإجراء main () للاتصال بكل من EncryptFileوديكريبتفيلي:
    static void Main(){      // Must be 64 bits, 8 bytes.      // Distribute this key to the user who will decrypt this file.      string sSecretKey;               // Get the key for the file to encrypt.      sSecretKey = GenerateKey();      // For additional security pin the key.      GCHandle gch = GCHandle.Alloc( sSecretKey,GCHandleType.Pinned );               // Encrypt the file.              EncryptFile(@"C:\MyData.txt",          @"C:\Encrypted.txt",          sSecretKey);      // Decrypt the file.      DecryptFile(@"C:\Encrypted.txt",          @"C:\Decrypted.txt",          sSecretKey);      // Remove the key from memory.       ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);      gch.Free();}
  3. حفظ الملف. قم بتشغيل التطبيق الخاص بك. تأكد من أن thepath المستخدمة لنقاط اسم ملف الإدخال اكسيستينجفيلي.

اختبار الإجراء

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

إتمام سرد التعليمات البرمجية

using System;using System.IO;using System.Security;using System.Security.Cryptography;using System.Runtime.InteropServices;using System.Text;namespace CSEncryptDecrypt{   class Class1   {      //  Call this function to remove the key from memory after use for security      [System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]      public static extern bool ZeroMemory(IntPtr Destination, int Length);		      // Function to Generate a 64 bits Key.      static string GenerateKey()       {         // Create an instance of Symetric Algorithm. Key and IV is generated automatically.         DESCryptoServiceProvider desCrypto =(DESCryptoServiceProvider)DESCryptoServiceProvider.Create();         // Use the Automatically generated key for Encryption.          return ASCIIEncoding.ASCII.GetString(desCrypto.Key);      }      static void EncryptFile(string sInputFilename,         string sOutputFilename,          string sKey)       {         FileStream fsInput = new FileStream(sInputFilename,             FileMode.Open,             FileAccess.Read);         FileStream fsEncrypted = new FileStream(sOutputFilename,             FileMode.Create,             FileAccess.Write);         DESCryptoServiceProvider DES = new DESCryptoServiceProvider();         DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);         DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);         ICryptoTransform desencrypt = DES.CreateEncryptor();         CryptoStream cryptostream = new CryptoStream(fsEncrypted,             desencrypt,             CryptoStreamMode.Write);          byte[] bytearrayinput = new byte[fsInput.Length];         fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);         cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);         cryptostream.Close();         fsInput.Close();         fsEncrypted.Close();      }      static void DecryptFile(string sInputFilename,          string sOutputFilename,         string sKey)      {         DESCryptoServiceProvider DES = new DESCryptoServiceProvider();         //A 64 bit key and IV is 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.         FileStream fsread = new FileStream(sInputFilename,             FileMode.Open,             FileAccess.Read);         //Create a DES decryptor from the DES instance.         ICryptoTransform desdecrypt = DES.CreateDecryptor();         //Create crypto stream set to read and do a          //DES decryption transform on incoming bytes.         CryptoStream cryptostreamDecr = new CryptoStream(fsread,             desdecrypt,            CryptoStreamMode.Read);         //Print the contents of the decrypted file.         StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);         fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());         fsDecrypted.Flush();         fsDecrypted.Close();      }       static void Main()      {         // Must be 64 bits, 8 bytes.         // Distribute this key to the user who will decrypt this file.         string sSecretKey;                  // Get the Key for the file to Encrypt.         sSecretKey = GenerateKey();         // For additional security Pin the key.         GCHandle gch = GCHandle.Alloc( sSecretKey,GCHandleType.Pinned );                  // Encrypt the file.                 EncryptFile(@"C:\MyData.txt",             @"C:\Encrypted.txt",             sSecretKey);         // Decrypt the file.         DecryptFile(@"C:\Encrypted.txt",             @"C:\Decrypted.txt",             sSecretKey);         // Remove the Key from memory.          ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);         gch.Free();      }   }}
مراجع
لمزيد من المعلومات حول التشفير، واستخدام ميزات.NET التشفير، راجع مواقع ويب MSDN التالي:

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 307010 - آخر مراجعة: 01/25/2015 06:44:00 - المراجعة: 5.0

Microsoft Visual C# 2005, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbsecurity kbio kbcrypt kbhowtomaster kbmt KB307010 KbMtar
تعليقات
e="text/JavaScript" async=""> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("