I have this method to make a xor between 2 NSStrings, i´m printing the result on NSLog but it isn´t the expect.
Can´t figure out what i´m doing wrong.
(void)XorSecretKeyDeviceId
{
NSString* secretKey = @"123";//
NSString* deviceId = @"abcdef";//
NSData* stringKey = [secretKey dataUsingEncoding:NSUTF8StringEncoding];
NSData* stringDeviceId = [deviceId dataUsingEncoding:NSUTF8StringEncoding];
unsigned char* pBytesInput = (unsigned char*)[stringKey bytes]; //Bytes
unsigned char* pBytesKey = (unsigned char*)[stringDeviceId bytes];
unsigned int vlen = [secretKey length]; //Keys Length
unsigned int klen = [deviceId length];
unsigned int v;
unsigned int k = vlen % klen;
unsigned char c;
for(v = 0; v < vlen; v++)
{
c = pBytesInput[v] ^ pBytesKey[k];
pBytesInput[v] = c;
NSLog(@"%c", c);
k = (++k < klen ? k : 0);
}
}
Are you setting your
pBytesInputandpBytesKeyvariables correctly? At the moment, you haveunsigned char* pBytesInput = (unsigned char*)[stringKey bytes];(i.e. the input is the “key”), andpBytesKeyis the device ID. This seems odd.Also, be careful using UTF-8 encoding. UTF-8 uses the high bit on any byte in the string to indicate a “continuation” of a multi-byte character into the next byte. Your encoding could plausibly generate invalid UTF-8 by giving the setting the high bit of the final byte in the encryption.
For more than that, you’ll have to say what the “wrong result” is.