Java 客户不可修改的文件

Java 客户不可修改的文件,java,configuration,external,Java,Configuration,External,我有一些Java代码使用的配置文件xml和xsl格式。客户不应该能够篡改这些文件。我对客户能够读取这些文件没有问题,但他们不应该能够修改这些文件 注: 这些文件不需要对客户可见,但即使他们可以查看这些文件也不是问题。 如果客户的需求发生变化,我应该能够为他们提供一组新的配置,因此这些文件应该在我交付的WAR之外。 编辑:只需重新阅读,你是唯一一个更新文件。然后应该使用公钥-私钥加密,例如RSA。这样,您是唯一可以创建或编辑配置文件的人 否则,实现这一目标没有简单的方法。您可以轻松地加密文件,或保

我有一些Java代码使用的配置文件xml和xsl格式。客户不应该能够篡改这些文件。我对客户能够读取这些文件没有问题,但他们不应该能够修改这些文件

注:

这些文件不需要对客户可见,但即使他们可以查看这些文件也不是问题。 如果客户的需求发生变化,我应该能够为他们提供一组新的配置,因此这些文件应该在我交付的WAR之外。
编辑:只需重新阅读,你是唯一一个更新文件。然后应该使用公钥-私钥加密,例如RSA。这样,您是唯一可以创建或编辑配置文件的人

否则,实现这一目标没有简单的方法。您可以轻松地加密文件,或保存文件的哈希值。第一种方法将完全隐藏文件,使其无法读取,只要客户不从您的程序中提取加密密钥。散列仅用于验证,因此它所能做的就是判断文档是否被篡改

总而言之,只要文档存储在客户的本地计算机上,就没有办法让客户接触不到文档。你只能给客户制造麻烦,确保他们不会犯错

如果您想要真正安全的文件,您必须将它们存储在服务器端


如果您希望客户阅读但不编辑文件,您可以将未加密的XML文件与真正加密的文件一起保存,但只读取加密的文件。

即使是半年前我在制作程序时也遇到了同样的问题。我意识到基本上,我无法阻止!所以,我用我的密码对文件进行了加密,这样只有我的程序才能理解它,而没有其他人!我建议你也这样做

例如,如果.xml文件有一个名为的节点,则可以将该节点重命名为毫无意义的名称,即类似于的名称,如果该节点的数量为12000,则可以使用ab@@而不是12000 a表示1,b表示2,0表示0

这样,没有人会理解它的意思,也不会试图编辑它

此外,您可以将文件扩展名从.xml重命名为.mp3或.exe,这样他们就不会知道这是您的数据文件


我也这么做了,而且成功了

要做到这一点,真的没有可靠的方法;虽然您可以更改自Java 7以来的文件权限,但这不会阻止其他进程更改所述权限。习惯于失望。您在文件中添加了一条注释,说明类似于此文件内容的内容只能由其他进程更改。自行更改此文件可能会导致应用程序行为不正确,并可能导致数据丢失。我/我们不对未经授权更改此文件造成的任何负面影响负责。为了明确他们不应该碰它,如果他们碰了,那么一切随后都坏了是他们的错。如果希望客户阅读而不是编辑文件,可以给他们签名。哈希似乎是一种很好的方法。我是否必须在存储散列值之前对其进行加密,或者是否有更好的方法?所谓加密,我指的是对称密钥,密钥在java代码中硬编码。虽然它不是很安全,但我不介意硬编码。您需要某种方法来确保您的客户无法重新计算哈希值。可能是应用程序中硬编码的隐藏盐。但是,如果配置文件从未在客户端更改,我仍然会改进异步加密。看起来您使用的是一个简单的vernam密码,这很容易被破坏。这不是一个问题吗?或者我理解你的答案错了吗?事实上,vernam密码是一种更复杂的密码。这只是一个简单的问题。另外,谁能理解节点将包含钱的数量?此外,最后的扩展名更改会阻止文件的可读性,除非用户非常高级和/或在文本编辑器中打开每个文件!