XOR演算
XOR
操作、中国は「排他的論理和演算」と呼ば
以下のように定義される2つの値が同じで、リターンされfalse
、そうでなければ返しますtrue
。すなわち、あるXOR
二つの値が異なるかどうかを決定するために使用することができます。
次の真理値表に対応します:
入力 ABを |
出力 A XOR B |
---|---|
0 0 | 0 |
0 1 | 1 |
1 0 | 1 |
1 1 | 0 |
XORアプリケーション
XOR演算は素晴らしい機能を持っている:値は二回XORをそれを行う場合は、値そのものを返します。
// 第一次 XOR
1010 ^ 1111 // 0101
// 第二次 XOR
0101 ^ 1111 // 1010
暗号化されたデータ
次のようにiOSのは、データを暗号化:
データバイトの各々を通るループは、次いで、XOR演算は、元データとのXORデータを対応する暗号化キー値に対応する各データが交換を行います。
- (NSStringの*)難読化:(NSStringの*)文字列 withKey:(NSStringの* )キー { たNSData *バイト= [ 文字列dataUsingEncoding:NSUTF8StringEncoding]。 バイト * myByte =(バイト* )バイトバイト]。 NSDataの * keyBytes = [キーdataUsingEncoding:NSUTF8StringEncoding]; バイト * keyByte =(バイト* )[keyBytesバイト]。 int型キーインデックス= 0 ; 用(INT X = 0 ; X <バイト長さ]×++ ) { myByte [X] = myByte [X] ^ keyByte [キーインデックス]。 もし(++キーインデックス== [keyBytes長さ]) { キーインデックス = 0 。 } } // 可以直接返回たNSData たNSData *あるnewData = [[NSDataのALLOC] initWithBytes:myByte長さ:[バイト長]。 NSStringの * aStringの= [[NSStringのALLOC] initWithData:あるnewDataエンコーディング:NSUTF8StringEncoding]。 返すaStringのを。 }