我有這種方法在2個NSStrings之間做一個xor,我在NSLog上打印結果,但它不是期望值。 無法弄清楚我做錯了什麼。Xor在2 NSString之間給出錯誤的結果
(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);
}
}
你爲什麼最初在** vlen%klen **開始k?它的初始值不應該是0嗎?另外,如果您向我們舉例說明了您的程序打印的內容以及您期望打印的內容,這將會很有幫助。 –
它的打印「UWU」應該以十六進制打印「707070」,並且在打印「PPP」時k = 0。所以也許它在k = 0時正常工作。目前我會相信它正常工作,因爲這一點。 – bruno