我不需要任何严格的安全措施,我只需要阻止 11 岁的 child 使用 plist 编辑器轻松编辑我的游戏中的硬币数量。
我创建了一个接受字符串的函数,对于字符的每个 unicode 值,它都会将该 unicode 值提高 220 加上字符串中字符数的 14 倍。
显然,如果字符串长度约为一百万个字符,这将失败(我认为),因为最终您会用完 unicode 字符,但出于所有意图和目的,这只会用于 20 个字符及更少的字符串。
此范围内是否有任何 unicode 字符不会存储到 plist 中,或者在我保存 plist 时被 Apple 的底层代码忽略,这样当我检索它并解密时,该字符就会消失,我不能解密吗?
+(NSString*)encryptString:(NSString*)theString {
NSMutableString *encryptedFinal = [[NSMutableString alloc] init];
for (int i = 0; i < theString.length; i++) {
unichar uniCharacter = [theString characterAtIndex:i];
uniCharacter += +220+(14*i);
[encryptedFinal appendFormat:@"%C", uniCharacter];
}
return encryptedFinal;
}
+(NSString*)decryptString:(NSString*)theString {
NSMutableString *decryptedFinal = [[NSMutableString alloc] init];
for (int i = 0; i < theString.length; i++) {
unichar uniCharacter = [theString characterAtIndex:i];
uniCharacter += +220+(14*i);
[decryptedFinal appendFormat:@"%C", uniCharacter];
}
return decryptedFinal;
}
最佳答案
如果您要在 20 个字符行的任何给定点处加密 unicode 索引中的前 26+26+10+30 个字符之一,则它适用于长度为 20 个字符或更少的字符串范围。它可能工作得更高,我只是没有测试它更高。
这是我为测试它而创建的代码,所有 unicode 字符都存储在一个 NSString 中并保持有效以供稍后计数。
int i = 0;
NSMutableString *encryptedFinal = [[NSMutableString alloc] init];
NSString *theString = @"a";
int j = 26+26+10+30;//letters + capital letters + numbers + 30 extra things like ?><.\]!@$
int f = 0;
int z = 0;
while (f < j) {
while (i < 220+220+(14*20)) {
unichar uniCharacter = [theString characterAtIndex:0];
uniCharacter += +f;
uniCharacter += +220+(14*i);
[encryptedFinal appendFormat:@"%C", uniCharacter];
i++;
}
z += i;
f++;
i = 0;
}
NSLog(@"%@", encryptedFinal);
NSLog(@"%i == %i?", z, encryptedFinal.length);
关于ios - 这个unicode加密会失败吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21897905/