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

حماية ملفات المرفقة مع البرنامج.

مغلق
بدأه Tony_Shaowy في 14 يناير 2002 · 0 رد · 552 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1

اخواني الاكارم تحية طيبة...

تواجهني مشكلة ارجو المساعدة في حلها باسرع وقت.

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

لقد استعملت لذلك RichTextBox لعرض المعلومات, فاستخدمت تنسيق rtf الذي يدعمه RichTextBox .

والسؤال هو كيف امنع المستخدم من فتح ملفات الـrtf والتعديل عليها.

أو هل هناك طريقة لتشفير ملفات الـrtf مع العلم انها تحوي صور.

علماً اني قمت بنسخ ملفات الـ rtf الى الـCD مع البرنامج.

طبعاً لا أستطيع ادراج ملفات الـ rtf ضمن code البرنامج أو ضمن Resource file لان ذلك يؤدي الى زيادة حجم الملف التنفيذي بمقدار الملفات و بطىء تحميل وعمل الملف التنفيذية.

فكرت بطريقة ولكنها بطيئة:

Public Function AsciText(SourceText As String) As String

Dim intLength As Integer, intCntr As Integer, intResult As String, Asci As Integer

    intLength = Len(SourceText)

    intResult = ""

    For intCntr = 1 To intLength

        intResult = intResult & Format(Asc(Mid(SourceText, intCntr, 1)), "000")

    Next intCntr

    AsciText = intResult



End Function



Public Function ReAsciText(SourceAsciText As String) As String



Dim intLengthRe As Integer, intCntrRe As Integer, intResultRe As String

    intLengthRe = Len(SourceAsciText)

     intResultRe = ""

    For intCntrRe = 1 To intLengthRe Step 3

        intResultRe = intResultRe & Chr(Mid(SourceAsciText, intCntrRe, 3))

    Next intCntrRe

    ReAsciLesson = intResultRe



End Function

نضع هذا الكود للتشفير:

Private Sub Command1_Click()

Dim strText As String, strCodeTxt As String, LOtext As Long, sLine As String, I As Long

For N = 1 To 40

    Label3.Caption = N

    strText = "   "   ' مسار الملف المراد تشفيره

    strCodeTxt = "    "   'مسار الملف الجديد المشفر

    Open strText For Input As #1

        While Not EOF(1)

            Line Input #1, sLine

            LOtext = LOtext + 1

        Wend

    Close #1

    sLine = ""

    Open strText For Input As #1

    Open strCodeTxt For Output As #2

        While Not EOF(1)

            Line Input #1, sLine

            Print #2, AsciText(sLine)

            I = I + 1

            ProgressBar1.Value = (100 * I) / LOtext

        Wend



    Close #2

    Close #1

    ProgressBar1.Value = 0

Next N



End Sub

وهذا الكود لفك التشفير:

Private Sub Command2_Click()

Dim LOtext As Long, sLine As String, I As Long

Open " 'مسار الملف المراد فك تشفيره" For Input As #1

While Not EOF(1)

    Line Input #1, sLine

    LOtext = LOtext + 1

Wend

Close #1

sLine = ""

Open " 'مسار الملف المراد فك تشفيره" For Input As #1

Open " 'مسار الملف الجديد بعد فك التشفير" For Output As #2

While Not EOF(1)

    Line Input #1, sLine

    Print #2, ReAsciText(sLine, 3)

    I = I + 1

    ProgressBar1.Value = (100 * I) / LOtext

Wend



Close #2

Close #1



ProgressBar1.Value = 0

End Sub

وهذا حل آخر وهو سريع ولكن المشكلة أن أي شخص لديه إلمام بنوع الملفات يستطيع فتح الملف:

نضع الكود التالي عند حماية الملف:

Private Sub Command1_Click()

Dim ContentFile As String

Dim Password As String

Dim FileNumber As Long



LessonName = "'مسار الملف المراد حمايته"



    FileNumber = FreeFile

    

    'تهيءة المتحول بحجم الملف الذي سوف يفتح لكي يتم وضع المحتويات به

    ContentFile = Space$(FileLen(Trim$(LessonName)))

    

    Open Trim$(LessonName) For Binary As FileNumber

        Get #FileNumber, 1, ContentFile

    Close #FileNumber

    

    Password = "'c5"

    ContentFile = Password & "#" & ContentFile

    Open Trim$(LessonName) For Binary As FileNumber

        Put #FileNumber, 1, ContentFile

    Close #FileNumber

    

End Sub

وهذا الكود لفك الحماية:

Public Function OpenText(SurceTextPath As String) As String



Dim ContentFile As String

Dim FileNumber As Long

Dim i As Long

Dim ss As String

Dim RongPAssword As Integer



ContentFile = ""

    'تعريف رقم ملف جديد لدى ويندوز

    FileNumber = FreeFile

    'تهيءة المتحول بحجم الملف الذي سوف يفتح لكي يتم وضع المحتويات به

    ContentFile = Space$(FileLen(Trim$(SurceLessonPath)))

    

    'فتح الملف بشكل ثنائي ووضعه داخل المتحول

    Open Trim$(SurceLessonPath) For Binary As FileNumber

        Get #FileNumber, 1, ContentFile

    Close #FileNumber

    

    

    'يتم قرائة الملف من البداية حتى يتم التاكد من بداية الحرف

    'كلمة المرو#

    

    For i = 1 To Len(ContentFile)

        'يتم قطع عدد من الاحرف بمقدار الدوارة ووضعها داخل المتغيير حتى يتم اختبار وجود الحرف حتى تاتي العملية التالية

        ss = Mid$(ContentFile, 1, i)

        'في حال تم وجود هذا الحرف يتم الخروج من الدوارة كلي تاتي العملية التالية

        If Right$(ss, 1) = "#" Then Exit For

    Next



    'يتم قطع القيمة السابقة من الملف لكي يتم اعادته بدون كلمة مرور

    ContentFile = Mid$(ContentFile, i + 1, Len(ContentFile))

    

    'يتم تخزين الملف بدون كلمة مرور

    OpenLesson = ContentFile



End Function

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

اما الطريقة الثانية فهي سريعة عند فك التشفير لعرض الملف داخل البرنامج ولكنها ليست آمنة فأي شخص لديه إلمام بنوع تنسيق الملفات يستطيع فتح الملف وقراءته.

فما الحل برأيكم دام فضلكم...

© ;)

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

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