2014-02-20 38 views
0

我不需要任何嚴肅的安全措施,我只需要用plist編輯器來阻止11歲的孩子輕鬆編輯我遊戲中的硬幣數量。這個unicode加密失敗了嗎?

我創建了一個函數,它接受一個字符串,對於字符的每個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; 
} 
+0

Unicode不起作用。並非所有的值都是有效的unicode值。你可以做的一件事是將'NSString'轉換爲'NSData',操縱數據。 – zaph

+0

你不需要這個。除非iPhone/iPad遭到破解,否則無法修改應用的.plist文件。如果iPhone/iPad已越獄,那麼代碼注入器將能夠擊敗幾乎所有簡單的加密方案。 – Pranav

+0

你可能想看看[這個答案](http://stackoverflow.com/questions/13843496/encrypt-decrypt-plist-file-ios?rq=1) – Pranav

回答

0

它適用於各種長度的串的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 ?><.\][email protected]$ 
    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); 
0

有兩種東西,你可以這樣做:

  1. 保存使用NSData而不是使用 NSNumber的硬幣數量。然後使用 NSData+AES 加密它。你甚至可以將你的整個.plist文件加密到 ,確保沒有其他字段被更改。

  2. 安全通過默默無聞。只需將硬幣數量保存爲一個重要的探空領域。例如:安全令牌號碼。您也可以創建一個虛擬數字的硬幣字段,其值被忽略。或者,也可以在兩個字段中保存相同的值,並在兩個值不匹配時將用戶標記爲作弊。