将依赖文本文件添加到JAR文件

时间:2014-05-03 11:47:41

标签: java jar

我有一个JAR文件,它依赖于5个不同的文本文件。 JAR文件读取文本文件并给出结果。我唯一的问题是我想隐藏文本文件,以便没有人能看到它。请建议我如何将这些文本文件添加到JAR包中。如果有人知道JAR-TO-EXE工具以便将文本文件隐藏在EXE中,那么它也是可以接受的。

2 个答案:

答案 0 :(得分:0)

我建议您将序列化视为一种可能的解决方案,这是一个链接。

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

我并非100%确定无论如何都无法重建您的数据,但是......当您打开文件时,文件的内容肯定是胡言乱语(即使您不想将其用于无论如何这都是非常有用的。)

编辑:我想详细说明升技,所以你知道它基本上是什么(如果你不是)...想象你有一个包含对象的arraylist(你需要保存的数据,就像你自己的员工类一样) Wih序列化你基本上可以将该列表序列化为一个文件,当你想加载数据时只需将其反序列化。带有保存数据的文件将包含任何打开它的人的乱码。它实际上比使用普通文件,你通常必须处理读取每一行等。还记得你必须在你需要的类中实现Serializable接口。

给你一个简单的例子,下面我使用了一个名为testing的非常简单的类,它只包含一个名字:

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;
    }

}

现在要序列化这个类的对象,记住你可以用对象的arraylist来做到这一点,但它不会在静态上下文中工作!因此,您无法在主方法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){}

如果您希望在行动中看到上述代码,可以在主要方法中进行测试,只需复制粘贴并导入所需的内容。

编辑:应该提到我读过它可以在序列化对象之前使用包装类来使用简单但安全的加密方法。但是你必须阅读它,尽管这将是一个非常优雅的解决方案。

答案 1 :(得分:0)

你可以隐藏' jar中的文件,但它们仍然可以访问。只需解压缩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):

How to package resources in Jar properly