2015-10-26 61 views
1

雖然我的應用程序不是遊戲,但基於投幣的遊戲可以作爲一個很好的比喻。保存用戶的硬幣計數

在這樣的遊戲中,用戶可以通過遊戲或購買IAP獲得一定數量的硬幣。主要問題是安全地存儲用戶在當地有多少硬幣。

我知道還有其他類似的問題,比如this。這個答案基本上說,在試圖安全地保存數據方面沒有用處;只是處理用戶可以編輯數據的事實。

我寧願不只是將數據留在公開中供用戶更改(如果他們可以編輯數據,爲什麼他們會購買IAP?)。我研究了Keychain,它具有查看和編輯數據的公共接口,以及NSUserDefaults,它保存到可以輕鬆更改的Plist中。

對我有沒有更好的選擇,或者我應該甚至不嘗試(如上面的答案)?

編輯:該應用程序實際上是一個開發人員工具,具有有限數量的標記。由於用戶都具有技術技能,他們中的大多數(我都假設)有足夠的知識來查找和更改Plist文件或Keychain數據。

+0

擴展您正在使用的威脅模型可能會有幫助。用戶繞過這種控制的動機如何,如果他們這樣做會真正花費什麼,這種利用有多容易傳播給其他用戶?你真的需要警惕這種貨幣的多少方面? (您可以通過編輯可用數量的硬幣來避免您的控制,或者通過阻止應用程序減少該數字,或者完全跳過對這些硬幣的檢查,或者在花費一枚硬幣後恢復到較舊的狀態......) – Jonah

+0

@Jonah該應用程序是iOS開發人員的翻譯人員(讓開發人員可以輕鬆翻譯Localizable.strings文件)。對於翻譯的每個字符都是從用戶中扣除的令牌。用戶有激勵來填充他們的令牌,以便他們可以繼續翻譯更多的字符。如果他們可以編輯Plist,他們可以簡單地手動添加更多,而不是通過IAP。 – erdekhayser

回答

0

這個解決方案對我非常有效。試試這個:https://github.com/nielsmouthaan/SecureNSUserDefaults。它會在你的UserDefaults文件中存儲加密的bool/string/float/integer。希望這是你想要的。確保您下載並將CocoaSecurity添加到您的項目中。 CocoaSecurity是SecureNSUSerDefaults的必需元素,因此您無需將其導入任何文件。您還必須下載Base64,這是CocoaSecurity的必需元素。您還需要將Base64添加到項目中,但不需要將其導入任何文件。

用法

導入頭文件中的任何地方,你要使用的加密方法。

[[NSUserDefaults standardUserDefaults] setSecret:@"your_secret_goes_here"]; 

我建議產生的數字和字母的隨機字符串:

#import <SecureNSUserDefaults/NSUserDefaults+SecureAdditions.h> 

然後,可能在你awakeFromNib方法設置加密密鑰,。 然後,您必須將信息存儲在您的UserDefaults文件中。

[[NSUserDefaults standardUserDefaults] 
    setSecretObject:@"your_secret_object" 
    forKey:@"the_key_your_object_will be_stored_under"]; 

要檢索的字符串,用這個方法:

NSString *retrievedData = [[NSUserDefaults standardUserDefaults]  
    secretStringForKey:@"the_key_your_object_will be_stored_under"]; 

我希望這有助於!

+0

順便說一句,你的應用程序的名稱是什麼,當它完成時我怎麼能得到它?我會有興趣使用它! – SGP

+0

我會試試這個。該應用程序名爲Local,它位於開發工具下的MAS中。但是想一想...你知道應用程序中的漏洞。我正在看你ಠ_ಠ – erdekhayser

+0

是的,但是如果沒有你的加密密鑰,我將無法解密數據!記住,這是你設置加密密鑰的地方:'[[NSUserDefaults standardUserDefaults] setSecret:@「your_secret_goes_here」];'! – SGP