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

如果您无法保存原始字符串,则您的过程必须具有某种已知的密钥,以便它是可逆的。您还关心添加到字符串中的信息量,但您并不关心它特别难以解码。我猜你正在通过网络传输字符串。

我的建议是:使用Cæsar cipher。ROT-13 是最著名的例子。可能的输入字符集中的每个字符都排成一行,并且该列表以相同的顺序与另一个配对,但其起点移动了。第二个列表提供每个字符的输出。例如,

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

(不要忘记标点符号!)

"Hello, world!"可能会出现这样的结果:"Mjqqt; Btwqi&".

因此,您可以通过将 'A' 的编码添加到字符串:来轻松传输密钥"FMjqqt; Btwqi&",这只是一个额外的字符。这并没有提供任何有意义的安全性——人们在早餐时就解决了这些问题——但乍一看确实像是胡言乱语。

于 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 回答