hi,
in my program i am Xor ing 3 strings , i am taking each character in the strings and Xor ing their ASCII values
but manually if i do Xor operation i am getting a different answer,
Can someone tell me how this result is coming,
x="7CA674" first string
lenx=len(x)
hi,
in my program i am Xor ing 3 strings , i am taking each character in the strings and Xor ing their ASCII values
but manually if i do Xor operation i am getting a different answer,
Can someone tell me how this result is coming,
x="7CA674" first string
lenx=len(x)
Private Sub XORIt(ByRef data As String, ByRef key As String, ByRef Y As String)
Dim l As Long
Dim lonLenKey As Long, lonKeyPos, lonLenTime, lonTmePos As Long
Dim key_file As String
key_file = "input\key.txt"
lonLenKey = Len(key)
For l = 1 To Len(data)
lonKeyPos = lonKeyPos + 1
If lonKeyPos > lonLenKey Then lonKeyPos = 1
Mid$(data, l, 1) = (Asc(Mid$(data, l, 1)) Xor Asc(Mid$(key, lonKeyPos, 1)))
Next l
lonLenTime = Len(Y)
For l = 1 To Len(data)
lonTmePos = lonTmePos + 1
If lonTmePos > lonLenTime Then lonKeyPos = 1
Mid$(data, l, 1) = (Asc(Mid$(data, l, 1)) Xor Asc(Mid$(Y, lonTmePos, 1)))
Next l
Close #55
Open key_file For Output As #55
Print #55, Hex(data)
Close #55
End Sub
what i am doing is ,each time my key,data and time will be different values taken from a text file as a string.
say for example,
data value is "7CA674"
key is "17767FA"
time is "25127000"
i will take the length of each string and i will do the xor operation, till the length of least string
my result for these value is 376456
Please someone justify this answer.
No, I'm getting a different result. Let me show you how I did it:
Code:
Private Sub XORTest()
'data Value Is "7CA674"
'key is "17767FA"
'time is "25127000"
'result is 376456
Dim dat$, key$, tim$ 'the strings
Dim ld%, lk%, lt%, lm1%, lmin% 'being the lengths and minimum
Dim i%, res$
dat = "7CA674"
key = "17767FA"
tim = "25127000"
ld = Len(dat)
lk = Len(key)
lt = Len(tim)
'get the minimum in 2 steps for better overview
lm1 = IIf(ld < lk, ld, lk)
lmin = IIf(lt < lm1, lt, lm1)
'lmin is now the shortest length
For i = 1 To lmin
res = res + Chr$(Asc(Mid$(dat, i, 1)) Xor Asc(Mid$(key, i, 1)) Xor Asc(Mid$(tim, i, 1)))
Next
MsgBox res
End Sub
The result is "4AG27B". I'm quite confident of the result.
I get the min length of all three strings, then in a loop I xor the ASC values of corresponding characters in same positions and add the Chr$() of the resultin value to the resulting string res$.
I'm confident, because I use a similar algorithm to xor strings for simple encoding.
Let me hint, that you are making a common error.
Code:
Dim lonLenKey As Long, lonKeyPos, lonLenTime, lonTmePos As Long
lonKeyPos and lonLenTime wont be long. You have to declare As Long for every variable individually. Without it, it becomaes a variant.
If lazy for writing, you can use the shortcuts Dim a&, b&, c&, d$, i%
a, b, and c become Long, d becomes string and i% will be integer.
Also you don't need longs for this. Integer is sufficient.
Last edited by WoF; November 6th, 2009 at 11:22 AM.
Bookmarks