簡體   English   中英

將相關文本文件添加到JAR文件

[英]Adding dependent text files to JAR file

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

我建議您將序列化作為一種​​可能的解決方案,以下是鏈接。

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

我不是100%確定無論如何都無法重建數據,但是...打開文件時,文件的內容肯定會變得亂七八糟(即使您不想為此使用它,無論如何也要學習它非常有用) )。

編輯:我想詳細說明一下,以便您知道它的基本含義(如果您不知道)...想象您有一個包含對象(需要保存的數據,如您自己的員工類之類的對象)的arraylist。您基本上可以將該列表序列化為文件,並且想要加載數據時只需將其反序列化即可。保存數據的文件將對打開它的任何人來說都是亂碼。實際上,這比處理普通文件要容易得多必須處理讀取的每一行,等等。還記得您必須在需要使用它的類中實現Serializable接口。

讓您成為一個簡單的示例,在下面,我使用了一個非常簡單的類,稱為test,僅包含名稱:

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){}

如果您想查看上面的代碼,可以在主要方法中對其進行測試,只需將其復制粘貼並導入所需的內容即可。

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

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

密碼術本身是一個廣泛的主題,需要真正理解才能創建一個安全的解決方案,但是下面的示例提供了一個使用Java加密和解密數據的基本示例。

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

編輯

該鏈接建議使用以下內容:

相同的代碼生成“ 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()));

文件中存儲的文本將完全無法理解。 還有其他事情要考慮; 例如,如果您將密鑰存儲在一個類中,則可以提取它。 但是,對於所有安全措施而言,創建它的復雜性必須與應對它的難度相平衡。 此級別最終取決於您要保護的信息的性質。


如果您只想將文本文件打包在jar中,並且它們的安全性不是問題,請參閱以下內容(假設您使用的是eclipse):

如何在Jar中正確打包資源

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM