两个NSString之间的Xor给出了错误的结果

时间:2011-10-19 11:33:45

标签: iphone objective-c xor

我有这个方法在两个NSStrings之间建立一个xor,我在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 :(得分:0)

您是否正确设置了pBytesInputpBytesKey个变量?目前,您有unsigned char* pBytesInput = (unsigned char*)[stringKey bytes];(即输入是“密钥”),pBytesKey是设备ID。这看起来很奇怪。

另外,请注意使用UTF-8编码。 UTF-8使用字符串中任何字节的高位来指示下一个字节中多字节字符的“延续”。通过将设置设置为加密中最后一个字节的高位,您的编码可能会合理地生成无效的UTF-8。

除此之外,您还必须说出“错误结果”是什么。