
November 3rd, 2009, 11:56 PM
#1
Xor on stringhelp me please
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)
y="17767F" Second string
leny=len(y)
z="251270" Third string
lenz=len(z)
and my code is
For l = 1 To Len(x)
l Mid$(x, l, 1) = (Asc(Mid$(x, l, 1)) Xor Asc(Mid$(y,leny , 1)) Xor Asc(Mid$(z, lenz, 1)))
Next l
and my result is
x = 376456

November 4th, 2009, 12:00 AM
#2
Re: Xor on stringhelp me please
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)
y="17767F" Second string
leny=len(y)
z="251270" Third string
lenz=len(z)
and my code is
Originally Posted by gaya3_k
For l = 1 To Len(x)
l Mid$(x, l, 1) = (Asc(Mid$(x, l, 1)) Xor Asc(Mid$(y,leny , 1)) Xor Asc(Mid$(z, lenz, 1)))
Next l
and my result is
x = 376456

November 4th, 2009, 03:48 PM
#3
Re: Xor on stringhelp me please
Bitwise operations can only be executed on BYTE data types. You'd have to convert.
CBYTE() might help

November 4th, 2009, 09:52 PM
#4
Re: Xor on stringhelp me please
Thanks alot for your reply,
Can u please tell me exactly what CBYTE will do to solve my problem.
Gayathri.k

November 5th, 2009, 01:25 AM
#5
Re: Xor on stringhelp me please
Each character is has a byte code. You can't use a part of a character, unless you convert it to a byte
Take a look at this link:
http://msdn.microsoft.com/enus/libr...8VS.80%29.aspx

November 5th, 2009, 04:26 AM
#6
Re: Xor on stringhelp me please
No, no.
You can xor integers as well as ASC values.
The problem is in the expression
Code:
Mid$(x, l, 1) = (Asc(Mid$(x, l, 1)) Xor Asc(Mid$(y,leny , 1)) Xor Asc(Mid$(z, lenz, 1)))
Look what you are doing: from the y string and the z string you are always taking only ever the last character.
Make it so:
Code:
Mid$(x, l, 1) = (Asc(Mid$(x, l, 1)) Xor Asc(Mid$(y,l , 1)) Xor Asc(Mid$(z, l, 1)))
l is the loop variable which increments with every step in the for loop. leny and lenz are constantly pointing the last character of y and z.

November 6th, 2009, 01:32 AM
#7
Re: Xor on stringhelp me please
thanks alot for your reply,
my exact code is
Code:
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.
I am not getting how this result is coming
Thanks in advance,
Gayathri.K

November 6th, 2009, 11:19 AM
#8
Re: Xor on stringhelp me please
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.

November 6th, 2009, 09:39 PM
#9
Re: Xor on stringhelp me please
Hi WoF
Thanks alot yar..............
I will try out as u said...
And will tell you
THANKS,
Gayathri.k
Posting Permissions
 You may not post new threads
 You may not post replies
 You may not post attachments
 You may not edit your posts

Forum Rules

Click Here to Expand Forum to Full Width
This is a Codeguru.com survey!
