2011-06-02 43 views
1

我正在用Java編寫一個簡單的文本遊戲,我想要一個安全的方式來保存統計數據(金錢等)。保護Java數據(將項目保存到安全文件)?

我可以做一個文本文件,但它可以只是被修改。我想知道是否有一種簡單的方法可以讓人們更容易地弄亂保存的統計數據。

回答

1

序列化可能是一個簡單的解決方案。將需要保存的數據存儲到Serializable類中(查找java序列化接口)並將其寫入文件。它不會被超級加密,但它會阻止人們在記事本中打開並更改它。

下面是如何將對象序列化到文件的簡單示例;如果需要,Google搜索應該會產生更多。 http://www.rgagnon.com/javadetails/java-0075.html

+0

這正是我在找的,謝謝! – valon 2011-06-02 05:12:04

+0

如果您滿意,請將答案標記爲「已接受」。謝謝! – Cephron 2011-06-02 05:13:58

0

如果你只是想阻止人們修改文件的內容(但不關心他們是否能夠讀取它),那麼看看使用SHA1生成一個簡單的簽名這樣你就可以知道是否有人篡改了它。

通過這種方式,任何打開它的人都可以看到裏面的內容,但是不知道(因爲內容不匹配附加簽名),他們無法修改它。

如果你想完全加密文件,那也是可行的。谷歌像java encryption看到更多。

僞代碼看起來是這樣的:

public class SignedFileSaver { 

    private static final String SECRET = "Y0UR_S3CR3T_HERE"; 

    public void save(String content, String fileName) { 
    String signature = sha1(content + SECRET); 
    String signedContent = content + "\n----END CONTENT----\n" + signature; 
    writeFile(content, fileName); 
    } 

    public String load(fileName) { 
    String signedContent = readFile(fileName); 
    String content = signedContent.whateverTextIsBefore("\n----END CONTENT----\n"); 
    String signature = signedContent.whateverTextIsAfter("\n----END CONTENT----\n"); 

    String expectedSignature = sha1(content + SECRET); 
    if (!signature.equals(expectedSignature)) { 
     throw new SignedFileTamperedWith(fileName + " has been tampered with"); 
    } 
    return content; 
    } 
} 

當然,他們需要做的是反編譯你的編譯源代碼才能看到的祕密,但是這是他們必須跳通過一個額外的箍。