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