我有这个方法在两个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);
}
}
答案 0 :(得分:0)
您是否正确设置了pBytesInput
和pBytesKey
个变量?目前,您有unsigned char* pBytesInput = (unsigned char*)[stringKey bytes];
(即输入是“密钥”),pBytesKey
是设备ID。这看起来很奇怪。
另外,请注意使用UTF-8编码。 UTF-8使用字符串中任何字节的高位来指示下一个字节中多字节字符的“延续”。通过将设置设置为加密中最后一个字节的高位,您的编码可能会合理地生成无效的UTF-8。
除此之外,您还必须说出“错误结果”是什么。