我不需要任何严肃的安全措施,我只需要阻止11岁的plist编辑在我的游戏中轻松编辑他们的硬币数量。
我创建了一个带字符串的函数,对于字符的每个unicode值,它将此unicode值提高220加上字符串中字符数的14倍。
显然这会失败(我认为)如果字符串长达一百万个字符,因为最终你用完了unicode字符,但是对于所有意图和目的,这只会用在20个字符以下的字符串上。
当我保存plist时,此范围内是否有任何unicode字符不会存储到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;
}
答案 0 :(得分:1)
如果要在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);
答案 1 :(得分:0)
你可以做两件事:
使用NSData
而不是使用来保存硬币数量
NSNumber
。然后用
NSData+AES
加密它。您甚至可以将整个.plist文件加密到
确保没有其他字段被更改。
通过默默无闻的安全。只需将硬币数量保存为重要的声场即可。例如:安全令牌号码。您还可以创建虚假数量的硬币字段,其值将被忽略。或者也许在两个字段中保存相同的值,如果两个值不匹配,则标记用户作弊。