2014-05-03 88 views
1

我有一個JAR文件,它取決於5個不同的文本文件。 JAR文件讀取文本文件並給出結果。我唯一的問題是我想隱藏文本文件,以便沒有人能看到它。請建議我如何將這些文本文件添加到JAR包中。如果有人知道JAR-TO-EXE工具,以便將文本文件隱藏到EXE中,那麼它也是可以接受的。將依賴文本文件添加到JAR文件

+0

我假設它是你的代碼,你自己創建了jar文件? – GoldenJam

回答

0

我建議你看看序列化作爲一種​​可能的解決方案,這裏有一個鏈接。

http://www.tutorialspoint.com/java/java_serialization.htm

我不是100%肯定它不是可能呢重建你的數據,但...該文件的內容將definently是當你打開它(即使你不想使用胡言亂語它爲此學習反正它非常有用)。編輯:我想詳細說明一下,因此你知道它基本上是什麼(如果你不這樣做)......想象你有一個包含對象的數組列表(你需要保存的數據,比如你自己的員工類或者無論如何,你可以基於序列化將列表序列化爲一個文件,當你想要加載數據時,只需反序列化它,保存數據的文件將包含亂碼給任何打開它的人,它實際上比使用平均文件,在那裏你通常必須處理閱讀每一行等,還記得你必須在你需要做的類中實現Serializable接口。

讓你成爲一個簡單的例子,下面我使用了一個非常簡單的類測試只包含一個名稱:

public class Testing implements Serializable { 

    private String name; 

    public Testing(String name) { 
     this.setName(name); 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

現在要序列化這個類的一個對象,記住你可以用對象的數組列表來做到這一點,但它不會在靜態上下文中工作!所以你不能用主要的方法fx來測試它。

 File file = new File("test.dat"); 
     if (!file.exists()) file.createNewFile(); 

     try { 
      ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("test.dat")); 
      out.writeObject(new Testing("testobject")); 
     } catch(Exception ex) {} 


     try { 
      ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.dat")); 
      Testing loadedObject = (Testing) in.readObject(); 
      System.out.println(loadedObject.getName()); 
     } catch(Exception ex){} 

上面的代碼可以在main方法中,如果你想看到它的行動,只需複製粘貼並導入所需的東西進行測試。

編輯:應該提到,我讀過它可以在序列化對象之前通過使用包裝類來使用簡單但安全的加密方法。但是你將不得不閱讀,儘管這將是一個非常優雅的解決方案。

0

您可以'隱藏'jar中的文件,但它們仍然可以訪問。只需解壓縮該jar即可訪問其內容。如果這些文件無論如何都是'敏感'的,我會建議看看對它們進行加密。

加密本身是一個廣泛的主題,需要真正的理解來創建一個安全的解決方案,但下面有一個使用java加密和解密數據的基本示例。

http://www.software-architect.net/articles/using-strong-encryption-in-java/introduction.html

EDIT

鏈路建議使用以下:

相同的代碼以產生所述 'aesKey':

String key = "Bar12345Bar12345"; // 128 bit key 
// Create key and cipher 
Key aesKey = new SecretKeySpec(key.getBytes(), "AES"); 
Cipher cipher = Cipher.getInstance("AES"); 

要加密的字符串:

// encrypt the text 
    String toEncrypt = "Your text."; 
    cipher.init(Cipher.ENCRYPT_MODE, aesKey); 
    byte[] encryptedBytes = cipher.doFinal(toEncrypt.getBytes()); 
    String encrypted = new String(encryptedBytes); 

要解密的字符串:

 // decrypt the text 
    cipher.init(Cipher.DECRYPT_MODE, aesKey); 
    String decrypted = new String(cipher.doFinal(encrypted.getBytes())); 

文件中的存儲的文本將完全不知所云。還有其他的事情要考慮。例如,如果將密鑰存儲在某個類中,則可以將其提取出來。但是,採取一切安全措施後,創造它的複雜性必須與反對它的困難相平衡。這個級別最終取決於您所保護的信息的性質。


如果你只是要打包的罐子裏面的文本文件,並把它們的secruity是不是一個問題,請參見以下(假設你使用eclipse):

How to package resources in Jar properly

+0

請在JAVA中向我發送解密代碼,因爲您提供的鏈接僅包含加密的代碼。 – user2451844

+0

已經根據提供的鏈接添加了代碼示例。 – GoldenJam

+0

感謝您提供的解決方案。現在,如果我將文本文件打包到jar中,然後使用jar-to-exe工具將我現有的jar轉換爲exe。是否有可能以這種方式隱藏文本文件? – user2451844