2011-10-19 13 views
0

2つのNSStringの間にxorを作成する方法があります。NSLogで結果を出力していますが、期待通りではありません。 私は何が間違っているのか把握できません。2つのNSStringの間のXORが間違った結果を返します

(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

なぜ最初に** vlen%klen **でkを開始しますか?その初期値は0であってはなりませんか?また、あなたのプログラムが印刷するものの例と、それを印刷するために期待するものをあなたに教えてくれれば助かります。 –

+0

それは印刷 "UWU"は16進数で "707070"を印刷し、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