【发布时间】:2014-02-20 04:07:03
【问题描述】:
我不需要任何严格的安全措施,我只需要阻止 11 岁的 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;
}
【问题讨论】:
-
Unicode 不能那样工作。并非所有值都是有效的 unicode 值。您可以做的一件事是将
NSString转换为NSData,操作数据。 -
你不需要这个。除非 iPhone/iPad 越狱,否则无法修改应用程序的 .plist 文件。如果 iPhone/iPad 越狱,那么代码注入器将能够破解几乎所有简单的加密方案。
-
你可能想看看this answer
-
@Pranav 我们的数千名用户只需将他们的设备插入计算机即可修改他们的 plist 而无需越狱。中学生发布了数百个视频,这些视频已经开始影响我们的应用内购买销售。
-
@Zaph 这就是我所担心的。那么我范围内的任何 unicode 字符都无效吗?另外,如果我使用无效的 unicode 字符,NSData 是否会完全删除它,因此无法解密?还是它只是存储一个“损坏”的字符,其值可以在以后返回到解密版本?
标签: ios objective-c encryption unicode plist