Java中有没有任何方法可以安全地存储外部文件(在jar中)? Java文件被编译为.class文件并且不可读。将文本文件安全地存储在JAR中
我打算使用这种meganism来存储sql文件,其中包含查询,但我不希望那些提取jar时可读。外部文件是预先的,因为我们在开发时会有语法高亮显示,而不是将它们放入字符串中。
Java中有没有任何方法可以安全地存储外部文件(在jar中)? Java文件被编译为.class文件并且不可读。将文本文件安全地存储在JAR中
我打算使用这种meganism来存储sql文件,其中包含查询,但我不希望那些提取jar时可读。外部文件是预先的,因为我们在开发时会有语法高亮显示,而不是将它们放入字符串中。
一个jar文件几乎只是一个.zip文件,所以你可以把任何你想要的。没有内置加密,所以如果你想让SQL文件不可读,你必须加密它们(然后在你的代码中解密)。我不明白你的意思是什么“外部文件是预先的,因为我们然后有语法高亮而开发,而不是把它们放入一个字符串。”
是的,人们总是这样做。只需将文件添加到jar中,然后使用
getResourceAsStream访问它们。如果你使用maven构建,你可以将它们放到src/main/resources中,让它们进入jar。
当然你可以把它们放在罐子里。一旦你使用ClassLoader的getResourceAsStream方法就可以得到它们。
挑战在于阻止其他人提取它们。如果你的代码可以阅读,其他人也可以阅读。你在这里有什么要求?
在jar中获取文件不是问题...我们希望提取jar的人无法读取它们。 – ferdyh 2011-04-13 12:20:29
你有没有尝试在记事本中打开一个.class文件?你可以直接阅读所有的字符串值。你甚至不需要调试器。 – 2011-04-14 08:40:54
@Ferdy“不能读取”是不可能的。你可以做它_hard_。问题是如果对别人很难,那对你来说可能也很难。 – 2017-02-27 08:48:49
如果这个sql文件将被该jar包含的代码使用,那么你不能使其安全。由于唯一的方法是使用某个密钥对它们进行加密,但读取该sql文件的代码应该知道该密钥,因此可以使用任何java调试器访问该密钥。 – khachik 2011-04-13 12:22:44
仅供参考 - 有反编译器可用来读取类文件代码。见JD-GUI。仅仅因为它们是类文件并不会导致无法读取。 – Sean 2011-04-13 13:52:02