| CodeGuru Home | VC++ / MFC / C++ | .NET / C# | Visual Basic | Newsletters | VB Forums | Developer.com |
|
|||||||
| Visual Basic 6.0 Programming Ask questions about VB 6.0 (or earlier versions) or help others by answering their question. |
![]() |
|
|
Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
Xor on string--help 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 |
|
#2
|
|||
|
|||
|
Re: Xor on string--help 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 Quote:
x = 376456 |
|
#3
|
||||
|
||||
|
Re: Xor on string--help me please
Bitwise operations can only be executed on BYTE data types. You'd have to convert.
CBYTE() might help
__________________
David CodeGuru Article: Bound Controls are Evil-VB6 101 Samples: VB & C# VS2008 Samples CodeGuru Reviewer 2006 Dell CSP 2006, 2007 & 2008 MVP Visual Basic If your question has been answered satisfactorily, and it has been helpful, then, please, Rate this Post!
|
|
#4
|
|||
|
|||
|
Re: Xor on string--help me please
Thanks alot for your reply,
Can u please tell me exactly what CBYTE will do to solve my problem. Gayathri.k |
|
#5
|
||||
|
||||
|
Re: Xor on string--help 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/en-us/libr...8VS.80%29.aspx
__________________
David CodeGuru Article: Bound Controls are Evil-VB6 101 Samples: VB & C# VS2008 Samples CodeGuru Reviewer 2006 Dell CSP 2006, 2007 & 2008 MVP Visual Basic If your question has been answered satisfactorily, and it has been helpful, then, please, Rate this Post!
|
|
#6
|
||||
|
||||
|
Re: Xor on string--help 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))) 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))) |
|
#7
|
|||
|
|||
|
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
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 |
|
#8
|
||||
|
||||
|
Re: Xor on string--help 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
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 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 12:22 PM. |
|
#9
|
|||
|
|||
|
Hi WoF
Thanks alot yar.............. I will try out as u said... And will tell you ![]() THANKS, Gayathri.k
|
![]() |
| Bookmarks |
|
||||||
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|