1

をスクランブルしてからスクランブルを解除する手っ取り早い汚い方法はありNSStringますか?

// i.e.
NSString *helloWorld = @"Hello World!";
[helloWorld scrambled]; //helloWorld now = @"W olell!odh"

[helloWorld unscramble]; //helloWorld now = @"Hello World!"

Base64 暗号化を使用してこれと同様のことを既に達成しましたが、文字列が大幅に肥大化します。スクランブリングのセキュリティ レベルは少しでも気にしません。人間が判読できないように並べ替える必要があるだけです。

4

2 に答える 2

3

元の文字列を保存できない場合は、元に戻せるように、プロシージャに何らかの既知のキーが必要です。また、文字列に追加される情報の量も気になりますが、デコードが特に難しいことは気にしません。ネットワーク経由で文字列を送信していると思います。

私の提案は次のとおりです。シーザー暗号を使用してください。ROT-13 は最も有名な例です。可能な入力文字のセット内のすべての文字が並べられ、そのリストは同じ順序で別のリストとペアになりますが、その開始点はシフトされます。2 番目のリストは、各文字の出力を提供します。例えば、

Original: A B C D E ...
Encoded:  F G H I J ...

(句読点を忘れずに!)

次の"Hello, world!"ような結果が得られる場合があります"Mjqqt; Btwqi&"

したがって、「A」のエンコーディングを文字列の先頭に追加することで、キーを簡単に送信できます。"FMjqqt; Btwqi&"これは 1 つの余分な文字です。これでは意味のあるセキュリティはまったく提供されません。人々は朝食をとりながらこれらの問題を解決しますが、一見意味不明に見えます。

于 2013-08-11T18:38:14.103 に答える
0

単語のすべての文字を配列に入力し、配列をランダム化します。単語を NSString に保存して、元に戻せるようにしてください。

NSString *myString = @"Hello Word";
NSArray *myWords = [myString componentsSeparatedByString:@""];
 NSUInteger count = [myWords count];
for (NSUInteger i = 0; i < count; ++i) {
    // Select a random element between i and end of array to swap with.
    NSInteger nElements = count - i;
    NSInteger n = (arc4random() % nElements) + i;
    [self exchangeObjectAtIndex:i withObjectAtIndex:n];
}
NSString *newWord;
for(NSString *string in myWords){
     newWord = [newWord stringByAppendingString:string];
}
于 2013-08-11T18:22:37.377 に答える