2011-04-13 111 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

相關問題