2011-04-13 112 views
1

Java中有没有任何方法可以安全地存储外部文件(在jar中)? Java文件被编译为.class文件并且不可读。将文本文件安全地存储在JAR中

我打算使用这种meganism来存储sql文件,其中包含查询,但我不希望那些提取jar时可读。外部文件是预先的,因为我们在开发时会有语法高亮显示,而不是将它们放入字符串中。

+2

如果这个sql文件将被该jar包含的代码使用,那么你不能使其安全。由于唯一的方法是使用某个密钥对它们进行加密,但读取该sql文件的代码应该知道该密钥,因此可以使用任何java调试器访问该密钥。 – khachik 2011-04-13 12:22:44

+0

仅供参考 - 有反编译器可用来读取类文件代码。见JD-GUI。仅仅因为它们是类文件并不会导致无法读取。 – Sean 2011-04-13 13:52:02

回答

2

一个jar文件几乎只是一个.zip文件,所以你可以把任何你想要的。没有内置加密,所以如果你想让SQL文件不可读,你必须加密它们(然后在你的代码中解密)。我不明白你的意思是什么“外部文件是预先的,因为我们然后有语法高亮而开发,而不是把它们放入一个字符串。”

+0

如果你把它们放在一个类里面,我们的问题就解决了,但是我们不能轻易地阅读它们,因为在一个字符串中没有语法高亮显示,你必须为ex。 – ferdyh 2011-04-13 12:21:29

+0

@Ferdy:如果将它们放入类中作为字符串解决了您的问题(即,您不是针对调试器),您可以在应用程序启动时加密SQL文件(AES,Blowfish)并解密。 – khachik 2011-04-13 12:25:00

1

是的,人们总是这样做。只需将文件添加到jar中,然后使用

getResourceAsStream访问它们。如果你使用maven构建,你可以将它们放到src/main/resources中,让它们进入jar。

1

当然你可以把它们放在罐子里。一旦你使用ClassLoader的getResourceAsStream方法就可以得到它们。

挑战在于阻止其他人提取它们。如果你的代码可以阅读,其他人也可以阅读。你在这里有什么要求?

+0

在jar中获取文件不是问题...我们希望提取jar的人无法读取它们。 – ferdyh 2011-04-13 12:20:29

+0

你有没有尝试在记事本中打开一个.class文件?你可以直接阅读所有的字符串值。你甚至不需要调试器。 – 2011-04-14 08:40:54

+0

@Ferdy“不能读取”是不可能的。你可以做它_hard_。问题是如果对别人很难,那对你来说可能也很难。 – 2017-02-27 08:48:49

相关问题