• 0
zxcqwe

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

سؤال

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

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

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

أنا أستخدم طريقة لتشفير النص بصيغة 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 = strReturnEnd FunctionPublic 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 FunctionFunction ChkNum(NM As Single, LN As Integer) As Integer    If NM = Fix(NM) Then ChkNum = -1 * LN Else ChkNum = 0End FunctionFunction 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 كيلو بايت مثلاً) يأخذ وقتاً طويلاً، في حين أنني أحتاج للحصول على النتيجة بسرعة لأني مرتبط بزمن، وطبعاً هذا الوقت الطويل متوقع مع هذه الدالة لأنه كما ترون فالبرنامج يقوم بأكثر من عملية حسابية على كل بايت على حدة في النص بأكمله

 

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

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

 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

0 إجابة على هذا السؤال .

لاتوجد إجابات على هذا السؤال حتى الآن .


  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .