2011-10-19 5 views
0

2 개의 NSString 사이에 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); 
} 
} 
+0

왜 처음에 k를 ** vlen % klen **에서 시작합니까? 그것의 초기 값은 0이 아니어야합니까? 또한 프로그램이 인쇄하는 내용의 예와 인쇄하기를 기대하는 내용을 제공하면 도움이됩니다. –

+0

인쇄 중 "UWU"는 "707070"을 16 진수로, k = 0으로 "PPP"를 인쇄합니다. 그래서 아마도 k = 0으로 올바르게 작동 할 것입니다. 당분간 나는 그것이 올바르게 작동하고 있다고 믿을 것입니다. – bruno

답변

0

당신은 제대로 pBytesInputpBytesKey 변수를 설정하고 있는가? 현재 unsigned char* pBytesInput = (unsigned char*)[stringKey bytes]; (입력이 '키')이고 pBytesKey은 기기 ID입니다. 이상하게 보입니다.

또한 UTF-8 인코딩을 사용하십시오. UTF-8은 문자열의 모든 바이트에 대해 상위 비트를 사용하여 멀티 바이트 문자의 다음 바이트로의 "연속"을 나타냅니다. 인코딩에서 최종 바이트의 상위 비트를 설정하여 유효하지 않은 UTF-8을 생성 할 수 있습니다.

그 이상인 경우, "잘못된 결과"가 무엇인지 말해야합니다.

+0

그래, 나는 그런 식으로해서는 안되는 변수를 바꿨지 만, 그게 최종 결과와 얽매이지 않는다. – bruno

+0

문제를 해결하기 위해 수행 한 작업을 명확히 설명해 주시겠습니까? 감사. – Lukas1