2014-05-03 86 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