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

ما هي طريقة حفظ Structure إلى ملف مشفر؟

بدأه sscvbnm في 18 مارس 2010 · 4 رد · 839 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أنا أستخدم نظام لحفظ بيانات إلى ملفات بطريقة معينة من خلال Serializable Structure وتتم عملية الحفظ بالطريقة التالية:

   Dim BF As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
            Dim MS As New System.IO.MemoryStream()

            Try
                BF.Serialize(MS, ThisFileSystem)
                My.Computer.FileSystem.WriteAllBytes(FileName, MS.GetBuffer(), False)
                Return True
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical)
                Return False
            End Try

المشكلة أن هذا الملف لو تم فتحه بواسطة المفكرة لاستطعنا رؤية بنية الStructure وقراءة بعض القيم...

أريد طريقة للحفظ بحيث لو تم فتحه بالمفكرة ظهر النص كرموز حتى بنية الملف لا يظهر شيء سوى رموز وهذا موجود رأيته أكثر من مرة؛ فكيف يمكن عمل ذلك؟

جزاكم الله خيراً..

قال صلى الله عليه وسلم: من قال إذا أصبح: رضيت بالله ربا وبالإسلام دينا وبمحمد نبيا فأنا الزعيم لآخذن بيده حتى أدخله الجنة. الصحيحة/2686

#2

الأمر بسيط، اثناء و جود بيانات الـ Structure داخل الـ MemoryStream قم بتشفيرها داخل الذاكره و من ثم حفظها و عند استرجاعها قم بفك تشفيرها ثم تحميلها داخل الـ Structure.

التشفير قد يكون Encryption او قد يكون Compression ففى كلتا الحالتين البيانات سيتم حفظها بشكل مشوه و لن يستطيع احد قرائتها.

ألقى نظره على مجال الأسماء System.IO.Compression داخل System.dll و مجال الأسماء System.Security.Cryptography داخل مكتبات الدوت نت

و الله ولى التوفيق

1

مدونتي: C++ Tips and Tricks

#3

بارك الله فيك أخي الكريم..

أنا استخدمت من قبل طريقة ال Encryption لكن هذا لا يشفر بنية الStructure وإنما البيانات فقط، فيمكن بهذا معرفة ترتيب الStructure وأقسامها، فهل من طريقة لتشفير البنية والمعلومات الكل معاً؟

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

قال صلى الله عليه وسلم: من قال إذا أصبح: رضيت بالله ربا وبالإسلام دينا وبمحمد نبيا فأنا الزعيم لآخذن بيده حتى أدخله الجنة. الصحيحة/2686

#4
اقتباس
هذا لا يشفر بنية الStructure وإنما البيانات فقط، فيمكن بهذا معرفة ترتيب الStructure وأقسامها

كما قلت التشفير يتم على البيانات فقط التى سيتم حفظها داخل الملفات على الهارد ديسك اما بالنسبه لبنية التركيب فهى تتعلق بلغة البرمجة التى تستخدمها و لا علاقة لها بالتشفير فمثلا انظر معى هذا المثال:

هذا تركيب تم عمله داخل الفيجول بيسك و سيتم حفظه داخل ملف، هذا الملف سأقوم بتحميل التركيب المحفوط داخله من خلال برنامج تم صنعه بلغة الـ c، هذا شكل التركيب:

Public Enum ElementType        ' that enum occuped only 4 byte
    [Int32] = 1   ' signed 32-bit integer
    Float32 = 2   ' 32-bit float-point number
End Number

<StructLayout(LayoutKind.Explicit)> _
Public Structure MyData
      <FieldOffset(0)> _
      Pubic ItemType As ElementType

      <FieldOffset(4)> _
      Public IntValue As Integer

      <FieldOffset(4)> _
      Public FloatValue As Single
End Structure

التركيب السابق يتم حفظه فى 8 بايت فقط لإن العنصرين IntValue و FloatValue يشتركان فى نفس المساحه داخل الذاكره (4 بايت) و مساحة العنصر ItemType هى 4 بايت ايضا. لمعرفة اى من العنصرين IntValue و FloatValue الذى سنستخدم لابد من الرجوع للعنصر ItemType فإذا كان يساوى Int32 سيتم قراءة البيانات من العنصر IntValue و اذا كان Float32 سيتم قراءة البيانات من FloatValue.

التركيب السابق شكله كالتالى داخل لغة الـ C:

struct MyData {
    int ItemType;
    union {
        int    IntValue;
        float  FloatValue;
    } MixedItem;
};

كما ترى اختلف شكل التركيب و لكن القيمه المعاده من كلاهما واحده.

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

إذا كنت تقصد من تشفير هيكل التركيب بعدم القدره على معرفة شكله بعد الترجمه (بإستخدام Reflector او الـ Reflection للغات الدوت نت) فيمكنك استخدام ادوات لتشويه محتويات الملف التنفيذى حتى لا يستطيع احده فهم ما بداخله.

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 19 مارس 2010 في 16:04

مدونتي: C++ Tips and Tricks

#5

جزاك الله خيراً على التوضيح..

وما دمت ذكرت رفلكتر فأرجو مساعدتي في هذا الموضوع إن أمكنك:

/index.php?showtopic=216866

وشكراً

قال صلى الله عليه وسلم: من قال إذا أصبح: رضيت بالله ربا وبالإسلام دينا وبمحمد نبيا فأنا الزعيم لآخذن بيده حتى أدخله الجنة. الصحيحة/2686

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