这个unicode加密会失败吗?

时间:2014-02-20 04:07:04

标签: ios objective-c encryption unicode plist

我不需要任何严肃的安全措施,我只需要阻止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;
}

2 个答案:

答案 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)

你可以做两件事:

  1. 使用NSData而不是使用来保存硬币数量 NSNumber。然后用 NSData+AES 加密它。您甚至可以将整个.plist文件加密到 确保没有其他字段被更改。

  2. 通过默默无闻的安全。只需将硬币数量保存为重要的声场即可。例如:安全令牌号码。您还可以创建虚假数量的硬币字段,其值将被忽略。或者也许在两个字段中保存相同的值,如果两个值不匹配,则标记用户作弊。