السلام عليكم ورحمة الله وبركاته
------------------------------------
اسمحوا لي بالدخول مباشرة إلى الموضوع:
أنا أستخدم طريقة لتشفير النص بصيغة 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 كيلو بايت مثلاً) يأخذ وقتاً طويلاً، في حين أنني أحتاج للحصول على النتيجة بسرعة لأني مرتبط بزمن، وطبعاً هذا الوقت الطويل متوقع مع هذه الدالة لأنه كما ترون فالبرنامج يقوم بأكثر من عملية حسابية على كل بايت على حدة في النص بأكمله
فهل يمكن الحصول على نفس النتيجة ولكن بطريقة أسرع؟؟
وشكراً جزيلاً لكم