当前位置: 首页 > 知识库问答 >
问题:

如何在Java使用AES加密.txt以外的文件?

拓拔奇
2023-03-14

我正在开发一个Java应用程序,允许用户加密多个文件。我使用的是AES和128位密钥。我在这项工作中有以下问题:-

>

  • 实现的AES算法只适用于.txt文件,但它不能适用于任何其他文件类型,如Office文档、图像等。我的问题是AES适用于所有类型的数据还是只适用于文本文件?我已经搜索了很多,但我发现所有的例子都使用.txt文件。

    目前,我将文件的内容读入一个字符串,然后对其加密,然后将加密的字符串写回文件。我的问题是,有没有一种方法可以在不读取文件内容的情况下加密文件?

    有没有一种方法可以使用AES解密目录(文件夹)及其所有内容?我所说的“解密目录”是指它不能被打开,并且当试图打开时它会显示一些错误信息。

    加密文件还可以编辑、删除、移动、复制和重命名。我希望没有人可以对我的应用程序加密的文件执行这些操作。如何做到这一点?

    下面是我正在使用的代码,但只适用于.txt文件,不适用其他文件。不知道问题出在哪里:

    import java.io.File;
    import java.io.FileInputStream;
    
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    
    public class JavaCrypt
    {
        public static void main(String[] args) throws Exception {
    
               File f=new File("D:/a.txt");
               int ch;
    
                   StringBuffer strContent = new StringBuffer("");
                   FileInputStream fin = null;
                   try {
                   fin = new FileInputStream(f);
                   while ((ch = fin.read()) != -1)
                       strContent.append((char) ch);
                       fin.close();
                       } 
                   catch (Exception e) {
                       System.out.println(e);
                       }
    
                   System.out.println("Original string: " +strContent.toString()+"\n");
                   // Get the KeyGenerator
    
               KeyGenerator kgen = KeyGenerator.getInstance("AES");
               kgen.init(128); // 192 and 256 bits may not be available
    
    
               // Generate the secret key specs.
               SecretKey skey = kgen.generateKey();
               byte[] raw = skey.getEncoded();
    
               SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    
    
               // Instantiate the cipher
    
               Cipher cipher = Cipher.getInstance("AES");
    
               cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    
               byte[] encrypted = cipher.doFinal(strContent.toString().getBytes());
    
               System.out.println("encrypted string: " + encrypted.toString());
    
               cipher.init(Cipher.DECRYPT_MODE, skeySpec);
               byte[] original =cipher.doFinal(encrypted);
    
               String originalString = new String(original);
               System.out.println("Original string: " +originalString);
             }
    }
    
  • 共有1个答案

    艾俊悟
    2023-03-14

    >

  • 是的,AES适用于所有数据。

    没有。

    是的。

    压缩目录和内容,然后加密压缩文件。使用HMAC来确保没有人破坏加密的文件。

    你说,“请尽快回复,因为我必须提交这个项目在几天内,我是非常困难的在这些问题。”正如您现在所学到的,将事情留到最后一刻并不是获得好结果的好方法:适当的计划可以防止糟糕的表现。

    如果你早一点看事情,那么你就不会剩下太少的时间来解决你的问题了。

  •  类似资料:
    • 问题内容: 我需要知道如何创建AES并使用它来加密和解密Java中的文件。 问题答案: 尝试使用并传入。有关快速示例,请参见http://www.java2s.com/Tutorial/Java/0490__Security/UsingCipherOutputStream.htm,而仅使用它。

    • 问题内容: 我需要使用以下命令在JAVA中解密在UNIX中加密的文件: 我必须像在UNIX中一样在Java中解密 有人可以给我一个Java代码来执行此操作吗? 问题答案: OpenSSL通常使用自己的基于密码的密钥派生方法,该方法在中指定EVP_BytesToKey,请参见下面的代码。此外,它会在多行中隐式地将密文编码为base 64,以便在邮件正文中发送密文。 因此,结果是伪代码: 因此解密为:

    • 问题内容: 我已经获得了用于加密的Java实现,但是很遗憾,我们是.net商店,并且无法将Java集成到我们的解决方案中。不幸的是,我也不是Java专家,所以我已经为此奋斗了几天,以为我最终会在这里寻求帮助。 我一直在寻找一种与Java加密工作方式相匹配的方法,并且已经找到了在c#中使用RijndaelManaged所需的分辨率。我真的很近。我在c#中返回的字符串与前半部分匹配,但后半部分不同。

    • 我正在使用这样的代码来加密文件。 但是,尽管此代码成功加密。txt和。xml文件,它不适用于其他文件类型,例如。docx或图像文件格式。我可以对代码进行哪些更改以将功能扩展到所有此类文件类型?

    • 我正在尝试构建一个程序,该程序接收一个文件(任意大小的EXE),对其进行加密并将其复制到一个结构中。然后稍后对其进行解密,并确保其与使用时相同。 我有一个艰难的时间加密,然后解密文件。它似乎没有正确加密,我不知道如何测试它。 以下是我的问题: 我在这里做错了什么? 是否有更好的库使用AES加密?或者我应该坚持openSSL 让我们说我想用另一个键说“你好世界”。我能不能用这个字符串作为加密算法的参

    • 问题内容: 我正在连接一个旧的Java应用程序(无法更改该应用程序),该应用程序正在使用AES加密数据。这是原始Java代码如何实例化AES密码: 我是C / C ++开发人员,而不是Java,但是从我可以看出来的传统Java代码中,既没有指定模式,也没有指定初始化向量。有人偶然知道默认情况下将使用什么Java,因为未指定它? 我们需要新的C / C ++应用程序来解密Java加密的数据。但是我不