Search code examples
objective-chexxor

XOR'ing two hex values stored as an NSString?


here is yet another silly question from me!

NSString *hex1 = @"50be4f3de4";
NSString *hex2 = @"30bf69a299";

/* some stuff like result = hex1^hex2;    */

NSString *result = @"6001269f7d";

I have a hex value as a string, stored in two diff. variables. i need to Xor them and the result should be in another string variables?

i tried them by converting string --> NSData --> bytes array --> xor'ing them ...but i have no success..... thank you in advance...


Solution

  • You have to convert every character to Base16(for hexadecimal) format first.Then you should proceed with XORing those characters.You can use the strtol() function to achieve this purpose.

    NSString *hex1 = @"50be4f3de4";
    NSString *hex2 = @"30bf69a299";
    
    NSMutableArray *hexArray1 = [self splitStringIntoChars:hex1]; 
    NSMutableArray *hexArray2 = [self splitStringIntoChars:hex2]; 
    
    NSMutableString *str = [NSMutableString new];
    for (int i=0; i<[hexArray1 count]; i++ )
    {
        /*Convert to base 16*/
        int a=(unsigned char)strtol([[hexArray1 objectAtIndex:i] UTF8String], NULL, 16);
        int b=(unsigned char)strtol([[hexArray2 objectAtIndex:i] UTF8String], NULL, 16);
    
        char encrypted = a ^ b;
        NSLog(@"%x",encrypted);
        [str appendFormat:@"%x",encrypted];        
    }
    NSLog(@"%@",str);
    

    Utility method that i used to split characters of the string

    -(NSMutableArray*)splitStringIntoChars:(NSString*)argStr{
        NSMutableArray *characters = [[NSMutableArray alloc] 
                                  initWithCapacity:[argStr length]]; 
        for (int i=0; i < [argStr length]; i++) 
        { 
            NSString *ichar = [NSString stringWithFormat:@"%c", [argStr characterAtIndex:i ]]; 
            [characters addObject:ichar]; 
        } 
        return characters;
    }
    

    Hope it helps!!