繁体   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