是否有快速而肮脏的方式来扰乱NSString
然后解读它?
// i.e.
NSString *helloWorld = @"Hello World!";
[helloWorld scrambled]; //helloWorld now = @"W olell!odh"
[helloWorld unscramble]; //helloWorld now = @"Hello World!"
我已经使用Base64加密完成了与此类似的操作,但它为我的字符串增加了显着的膨胀。我不关心加扰的安全级别,只需要重新排序,这样就不会让人无法读取。
答案 0 :(得分: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&"
,这只是一个额外的字符。这没有提供任何有意义的安全性 - 人们在早餐时解决这些问题 - 但它看起来确实看起来像胡言乱语。
答案 1 :(得分: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];
}