我是否需要用散列存儲分數,即保護它免於被用戶編輯/欺騙?從我的newb知識來看,用戶無法查看和操作本地存儲的數據,例如plist文件。任何人都可以詳述嗎?在iOS設備上本地保存遊戲得分...需要安全嗎?
[編輯] 我在本地存儲分數,並定期上傳到Game Center排行榜。即使該設備越獄,我想要有安全防止分數被用戶操縱。什麼是好方法?
我是否需要用散列存儲分數,即保護它免於被用戶編輯/欺騙?從我的newb知識來看,用戶無法查看和操作本地存儲的數據,例如plist文件。任何人都可以詳述嗎?在iOS設備上本地保存遊戲得分...需要安全嗎?
[編輯] 我在本地存儲分數,並定期上傳到Game Center排行榜。即使該設備越獄,我想要有安全防止分數被用戶操縱。什麼是好方法?
我居然會做到這一點。現在到了涼爽的部分:使用這個類
這是一個軍用標準加密它會返回一個加密NSData
對象。然後只要將它保存到文件並在必要時讀/寫。我對這門課有非常好的體驗,用戶對此無能爲力。
比使用NSUserDefaults
將它存儲在普通視域中好得多。
給它一個去吧!
我已經開發了很多的iOS遊戲,我只是要麼保存在本地的分數:
從技術上講,其他應用程序無法觸摸應用程序捆綁包中的文件,因此您不必擔心它們正在被編輯。
這根本不是真的!這些位置可以被操縱! – fredpi
理論上,用戶不能操作這個存儲的數據。
但是,有一些方法可以訪問整個文件系統,所以人們可以打開遊戲文件夾,編輯plist並修改它們的分數。
就個人而言,如果我在沒有在線排行榜的情況下製作遊戲,我不會擔心。讓他們獲得他們想要的分數,只要其他玩家不受它的影響。
分數存儲在本地,但會定期上傳到Game Center。如果將分數存儲到越獄案例的文件中,您有什麼建議嗎? – andrewz
該設備不需要越獄,只需使用像iExplorer(http://www.macroplant.com/iexplorer)這樣的應用程序來訪問文件系統即可。 –
您可以使用自己的鹽值對分數進行編碼,並在需要時進行解碼。這將阻止用戶簡單地更改他們看到的號碼。在NSDictionary
保存,並將其轉換爲NSData
對象:
我對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!
爲什麼不將分數存儲在NSUserDefualt中? – Tirth
@RRB我的應用程序將支持多個用戶。 – andrewz