Java:防止文件被操纵的可能性

Java:防止文件被操纵的可能性,java,Java,我的Java程序在一个目录中构建一些文件(.html和.txt文件)。 为了完成一个项目,我想“打包”这些文件,例如将其发送给另一个人。 但是另一个人不应该能够简单地“解包”文件并操作html/txt文件。仅使用我的Java程序打开打包文件 我的想法是,使用主密码(在Java程序中设置)保护压缩目录。之后,我可以通过电子邮件发送zip文件,其他人只能用我的程序打开它。 不幸的是,在Java中没有一种简单而自由的方法可以使用密码压缩/解压文件夹 也许你还有别的想法 好的,我想我必须再解释一下这个

我的Java程序在一个目录中构建一些文件(.html和.txt文件)。 为了完成一个项目,我想“打包”这些文件,例如将其发送给另一个人。 但是另一个人不应该能够简单地“解包”文件并操作html/txt文件。仅使用我的Java程序打开打包文件

我的想法是,使用主密码(在Java程序中设置)保护压缩目录。之后,我可以通过电子邮件发送zip文件,其他人只能用我的程序打开它。 不幸的是,在Java中没有一种简单而自由的方法可以使用密码压缩/解压文件夹

也许你还有别的想法



好的,我想我必须再解释一下这个问题: 我可以用我的程序创建一个小型培训。培训内容包括包含信息的“普通”页面(html文件)和包含多项选择题的页面(问题和答案保存在txt文件中)。最后,培训用户可以打印一份证书(“用户XXX完成了培训”)。为了播放训练,html/txt文件被读入我的程序。
好的,所以我的问题是用户可以看到(和操作)文件。然而,他可以在txt文件中看到多项选择题的正确答案。

不幸的是,要做的事情实在太少了。这是编写web应用程序的优势之一;用户只看到输入和输出,但实际上无权访问应用程序本身。每当您发布一个应用程序(如JAR)时,总是可以对其进行反向工程和修改;没有任何模糊处理或加密可以彻底或完全阻止它。

不幸的是,真正需要做的事情并不多。这是编写web应用程序的优势之一;用户只看到输入和输出,但实际上无权访问应用程序本身。每当您发布一个应用程序(如JAR)时,总是可以对其进行反向工程和修改;任何模糊处理或加密都不能彻底或完全阻止它。

您可以做的一件事是为您想要的每个文件生成一个CRC编号,并将其与jar文件一起打包到属性文件中。每次用户选择该文件时,检查CRC值以确保没有人编辑过你的文件。这不是完全的傻瓜式方法

类似问题:

其他有用的链接:


就像在上面给定的链接中从jar动态加载图像一样,您可以从jar加载html和txt文件。

您可以做的一件事是为您想要的每个文件生成一个CRC编号,并将其与jar文件一起打包到属性文件中。每次用户选择该文件时,检查CRC值以确保没有人编辑过你的文件。这不是完全的傻瓜式方法

类似问题:

其他有用的链接:


就像在上面给定的链接中从jar动态加载图像一样,您可以从jar加载html和txt文件。

您所要求的基本上是不可能以安全的方式完成的(除非所有有趣的事情都发生在服务器上)-只要问问最近尝试制作DRM系统的人就可以了。(我看着你,育碧软件)


如果您只是在寻找一个简单的检查来阻止(非常)偶然的攻击者,不如像您提到的那样将支持文件存储在zip中,并在运行时将SHA1总和与编码到程序中的值进行比较。有人可以修改你的代码(或者对java来说,使用反编译器)并删除检查,但它实际上与任何东西一样好。

你所要求的基本上不可能以安全的方式完成(除非所有有趣的事情都发生在服务器上)-只要问问最近尝试制作DRM系统的人就行了。(我看着你,育碧软件)


如果您只是在寻找一个简单的检查来阻止(非常)偶然的攻击者,不如像您提到的那样将支持文件存储在zip中,并在运行时将SHA1总和与编码到程序中的值进行比较。有人可以修改您的代码(或者为java使用反编译器)并删除检查,但它实际上与任何东西都一样好。

没有100%的方法阻止人们阅读文件,但您可以让它变得更加困难。您需要做的是加密文件以防止随意阅读,或者对文件进行签名以检测真实性和篡改

下面概述了如何使用公钥/私钥加密对文件进行加密。您需要的工具包括:

  • 。您将使用此工具创建关键点
  • 。这是一个实现OpenPGP规范的Java加密API 您将使用GPG使用命令行加密文件,并使用BouncyCastle(BC)从Java读取它们

    以安全的方式执行此操作所涉及的步骤如下

  • 创建唯一的公钥/私钥对,以便使用GPG进行签名/加密。e、 g.
    gpg--gen key
    并按照屏幕上的说明操作。您通常可以选择默认设置,并将密钥称为“应用程序安全”-key@mydomain.com"

  • 加密Java将处理的文件。e、 g.
    gpg-e myfiles.zip
    进行加密。如果脚本中的数据变化很大,那么可以很容易地从脚本中执行此操作。加密通过使用公钥加密文件来工作。想要解密文件的人需要相应的私钥

  • 从密钥对导出私钥。e、 g.file
    gpg——导出密钥-a>解密.key

  • 创建仅包含导出的密钥的新密钥环。e、 g

    mkdir tmpkeys gpg-homedir=tmpkeys——导入decryption.key cp tmpkeys/secring.gpg keyring

  • 在Java程序中
    // During initialisation
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    
    // During decryption
    InputStream is = openKeyring(); // Wherever your keyring is
    InputStream isData = openDataFile(); 
    
    try {
      PGPSecretKeyRing kr = new PGPSecretKeyRing();
      PGPSecretKey sk = kr.getSecretKey();
      PGPPrivateKey pl = sk.extractPrivateKey("mypassphrase", securityProvider); 
      PGPObjectFactory of = new PGPObjectFactory(isData);
      Object o;
      while ((o = of.nextObject) != null) {
        if (o instanceof PGPCompressedData) {
          readAndDoWhateverINeedtoDo((PGPCompressedData) o).getDataStream());
        }
      }
    }
    catch (Exception e) {
      rejectFile(e);
    }