Xor между 2 NSString дает неправильный результат - PullRequest
0 голосов
/ 19 октября 2011

У меня есть этот метод, чтобы сделать xor между 2 NSStrings, я печатаю результат на NSLog, но это не ожидание. Не могу понять, что я делаю не так.

(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);
}
}

1 Ответ

0 голосов
/ 19 октября 2011

Правильно ли установлены переменные pBytesInput и pBytesKey? На данный момент у вас есть unsigned char* pBytesInput = (unsigned char*)[stringKey bytes]; (то есть, ввод - это «ключ»), а pBytesKey - это идентификатор устройства. Это кажется странным.

Также будьте осторожны, используя кодировку UTF-8. UTF-8 использует старший бит любого байта в строке, чтобы указать «продолжение» многобайтового символа в следующем байте. Ваша кодировка может создать недействительный код UTF-8, установив старший бит последнего байта в шифровании.

Более того, вам придется сказать, что такое "неправильный результат".

...