Xor on string--help me please
CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 9 of 9

Thread: Xor on string--help me please

  1. #1
    Join Date
    Oct 2009
    Posts
    18

    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. #2
    Join Date
    Oct 2009
    Posts
    18

    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 Originally Posted by gaya3_k View Post

    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

  3. #3
    Join Date
    Jan 2006
    Location
    Chicago, IL
    Posts
    14,960

    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
    2013 Samples: MS CODE 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. #4
    Join Date
    Oct 2009
    Posts
    18

    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. #5
    Join Date
    Jan 2006
    Location
    Chicago, IL
    Posts
    14,960

    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
    2013 Samples: MS CODE 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. #6
    Join Date
    Jul 2006
    Location
    Germany
    Posts
    3,722

    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)))
    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.

  7. #7
    Join Date
    Oct 2009
    Posts
    18

    Unhappy Re: Xor on string--help 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

  8. #8
    Join Date
    Jul 2006
    Location
    Germany
    Posts
    3,722

    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
    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.

  9. #9
    Join Date
    Oct 2009
    Posts
    18

    Smile Re: Xor on string--help 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
  •  


Azure Activities Information Page

Windows Mobile Development Center


Click Here to Expand Forum to Full Width

This is a CodeGuru survey question.


Featured


HTML5 Development Center