保护Java数据(将项目保存到安全文件)?

时间:2011-06-02 05:03:53

标签: java

我正在用Java编写一个简单的文本游戏,我想要一种安全的方法来保存统计数据(金钱等)。

我可以做一个文本文件,但之后就可以修改了。我想知道是否有一种简单的方法可以让某人更难以处理保存的统计数据。

2 个答案:

答案 0 :(得分:1)

序列化可能是一个简单的解决方案。将需要保存的数据存储到Serializable类(查找java Serializable接口)并将其写入文件。它不会被超级加密,但它会阻止人们在记事本中打开并更改它。

这是一个如何将对象序列化为文件的简单示例;如果需要,谷歌搜索应该产生更多。 http://www.rgagnon.com/javadetails/java-0075.html

答案 1 :(得分: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;
  }
}

当然,他们需要做的就是反编译您的编译源以查看秘密,但这是他们必须跳过的额外箍。