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

أريد تقليص الوقت المستخدم في تشفير نص بصيغة HEX عن طريق Xor

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

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

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

اسمحوا لي بالدخول مباشرة إلى الموضوع:

أنا أستخدم طريقة لتشفير النص بصيغة Hex وسأوضح ذلك بالمثال الآتي:

مثلاً النص لدينا هو (A5 B1 E2 E9 AD DD C6 A2 F4 F1) ومفتاح التشفير هو (03 02 01)

تقوم الطريقة على أساس إيجاد قيمة البايت الأول من النص XOR البايت الأول من المفتاح، والبايت الثاني من النص XOR البايت الثاني من المفتاح، وهكذا...

فتكون النتيجة في هذا المثال كالآتي:

البايت الأول = A5   XOR   01

البايت الثاني = B1   XOR   02

البايت الثالث = E2   XOR   03

البايت الرابع = E9   XOR   01

البايت الخامس = AD   XOR   02

وهكذا...

 

وقمت بعمل الكود الآتي:

Public Function HexToString(ByVal HexToStr As String) As String
    Dim strTemp   As String
    Dim strReturn As String
    Dim i         As Long
    For i = 1 To Len(HexToStr) Step 3
        strTemp = Chr$(Val("&H" & Mid$(HexToStr, i, 2)))
        strReturn = strReturn & strTemp
    Next i
    HexToString = strReturn
End Function

Public Function StringToHex(ByVal StrToHex As String) As String
    Dim strTemp   As String
    Dim strReturn As String
    Dim i         As Long
    For i = 1 To Len(StrToHex)
        strTemp = Hex$(Asc(Mid$(StrToHex, i, 1)))
        If Len(strTemp) = 1 Then strTemp = "0" & strTemp
        strReturn = strReturn & Space$(1) & strTemp
    Next i
    StringToHex = strReturn
    StringToHex = Trim$(StringToHex)
End Function

Function ChkNum(NM As Single, LN As Integer) As Integer
    If NM = Fix(NM) Then ChkNum = -1 * LN Else ChkNum = 0
End Function

Function Enc(Str As String, StrKey As String) As String
    Dim X As Integer
    Dim M As Integer
    Dim L As Integer
    Dim O As Single
    L = Len(HexToString(StrKey))
    For X = 1 To Len(HexToString(Str))
        M = Asc(Mid$(HexToString(Str), X, 1))
        O = (X Mod L) - ChkNum(X / L, L)
        Enc = Enc & " " & StringToHex(Chr$(M Xor Asc(Mid$(HexToString(StrKey), O, 1))))
    Next X
    Enc = Trim$(Enc)
End Function

 

حيث أستخدم الدالة ()Enc لعمل ذلك

 

وحتى الآن لا توجد أي مشكلة بالدالة وتأتي بالنتيجة سليمة مائة بالمائة

ولكن المشكلة في الوقت، فعد استخدام الدالة مع نص كبير نسبياً (20 كيلو بايت مثلاً) يأخذ وقتاً طويلاً، في حين أنني أحتاج للحصول على النتيجة بسرعة لأني مرتبط بزمن، وطبعاً هذا الوقت الطويل متوقع مع هذه الدالة لأنه كما ترون فالبرنامج يقوم بأكثر من عملية حسابية على كل بايت على حدة في النص بأكمله

 

فهل يمكن الحصول على نفس النتيجة ولكن بطريقة أسرع؟؟

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…