2011-07-01 48 views
8

我是否需要用散列存儲分數,即保護它免於被用戶編輯/欺騙?從我的newb知識來看,用戶無法查看和操作本地存儲的數據,例如plist文件。任何人都可以詳述嗎?在iOS設備上本地保存遊戲得分...需要安全嗎?

[編輯] 我在本地存儲分數,並定期上傳到Game Center排行榜。即使該設備越獄,我想要有安全防止分數被用戶操縱。什麼是好方法?

+0

爲什麼不將分數存儲在NSUserDefualt中? – Tirth

+0

@RRB我的應用程序將支持多個用戶。 – andrewz

回答

6

我居然會做到這一點。現在到了涼爽的部分:使用這個類

加密成AES:
https://web.archive.org/web/20160806074714/http://iphonedevelopment.blogspot.com/2009/02/strong-encryption-for-cocoa-cocoa-touch.html

這是一個軍用標準加密它會返回一個加密NSData對象。然後只要將它保存到文件並在必要時讀/寫。我對這門課有非常好的體驗,用戶對此無能爲力。

比使用NSUserDefaults將它存儲在普通視域中好得多。

給它一個去吧!

-1

我已經開發了很多的iOS遊戲,我只是要麼保存在本地的分數:

  • 使用NSUserDefaults的類或
  • 直接寫入他們的本地配置文件(。 txt,.plist等)。

從技術上講,其他應用程序無法觸摸應用程序捆綁包中的文件,因此您不必擔心它們正在被編輯。

+0

這根本不是真的!這些位置可以被操縱! – fredpi

3

理論上,用戶不能操作這個存儲的數據。

但是,有一些方法可以訪問整個文件系統,所以人們可以打開遊戲文件夾,編輯plist並修改它們的分數。

就個人而言,如果我在沒有在線排行榜的情況下製作遊戲,我不會擔心。讓他們獲得他們想要的分數,只要其他玩家不受它的影響。

+0

分數存儲在本地,但會定期上傳到Game Center。如果將分數存儲到越獄案例的文件中,您有什麼建議嗎? – andrewz

+3

該設備不需要越獄,只需使用像iExplorer(http://www.macroplant.com/iexplorer)這樣的應用程序來訪問文件系統即可。 –

1

您可以使用自己的鹽值對分數進行編碼,並在需要時進行解碼。這將阻止用戶簡單地更改他們看到的號碼。在NSDictionary

保存,並將其轉換爲NSData對象:

3

我對iPhone編程也很陌生 - 剛剛構建了我的第一款小遊戲,並且正在爲下一個版本添加Game Center功能(稱爲Smiley Lines;)我相信很多人會和我處於相同的狀況 - 簡單的散列,所以越獄的人不會輕易修改用戶默認值的分數,從而避免搞亂在線排行榜。

如果是這樣,我發現NSData轉換爲AES解決方案非常複雜(對於iOS新手和簡單的需要散列整數)並且有點矯枉過正。經過一番搜索之後,在這裏找到了一個很好的解決方案:Matthias Plapper has subclassed the NSUserDefaults class to provide some simple hashing with a secret key。超級易於使用 - 複製粘貼兩個源文件,這裏有一個示例用法:

// Configuring user defaults. It is recommended that you do this 
// immediately after the app did launch. 
    [NSUserDefaults setSecret:@"shh, this is secret!"]; 

// Write secure user defaults 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setSecureBool:YES forKey:@"IsRegistered"]; 

    // Read secure user defaults 
    BOOL valid = NO; 
    BOOL registered = [defaults secureBoolForKey:@"IsRegistered" valid:&valid]; 
    if (!valid) { 
     // the property has been modified, handle this situation 
    } else { 
     // Valid property, do whatever you need to do 
    } 

謝謝噸Matthias!

相關問題