我的小游戏中有以下三行存储新用户的ID和传递:
Properties prop = new Properties();
prop.setProperty(id, pass);
prop.store(new FileOutputStream(new File("path/to/project/src/properties.data")), "");
不幸的是我注意到只有将属性文件扩展名更改为txt,所有用户和密码才会被任何人看到和读取,这是我不喜欢的事情。请让我知道一种以某种方式加密文件的简单方法。
问题是我已经对此进行了搜索,但答案并不能满足我的需求,我不认为我的游戏文件会被最大的黑客攻击,所以使用AES或任何其他大型流行的图书馆会太多我我会说。你觉得怎么样?
答案 0 :(得分:3)
首先,无论扩展名是.txt
还是.data
还是其他任何内容,每个人都可以读取您的密码文件。扩展只是一个Windows技巧来决定打开文件的程序,但它对内容没有任何作用。
如果要加密密码文件,则需要密钥和/或密码,然后您需要确定存储密码文件的位置和方式。你只是推迟了问题。
如果文件中包含游戏中玩家的姓名和密码,请使用@Boris Spider的建议:不要保存(加密)密码,只需保存密码的哈希值即可。当有人登录时,计算输入密码的哈希值并将其与您保存的哈希值进行比较。如果它们相等,则用户输入正确的密码。有关可能的方法,请参阅this question and the accepted answer。
答案 1 :(得分:1)
这是一篇关于安全存储密码的优秀文章。示例是在C#中,而不是Java,但它仍然是一个有用的讨论: https://blog.mking.io/password-security-best-practices-with-examples-in-csharp/
我也强烈推荐Michael Howard和David LeBlanc所着的“24软件安全致命罪”,作为常见安全漏洞以及如何避免它们的更全面概述。
答案 2 :(得分:0)
我遇到了类似的问题,我在文件中写了一个AES加密字符串(在我的情况下,用户被要求从管理员那里获取加密密钥以放入属性文件,所以我提供了一种方法来加密密码给他们(也)然后在我正在阅读它的方法中解密它。