java - 如何在java中使用AES加密除.text之外的文件?

标签 java encryption aes

我正在开发一个java应用程序,它允许用户加密多个文件。我使用 AES 和 128 位 key 。我在这项工作中遇到以下问题:-

  1. 实现的 AES 算法仅适用于 .txt 文件,但不适用于任何其他文件类型,例如 Office 文档、图像等。我的问题是 AES 是否适用于所有类型的文件数据还是仅文本文件?我进行了很多搜索,但我发现的所有示例都使用 .txt 文件。

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

  3. 有没有办法使用 AES 解密目录(文件夹)及其所有内容? 通过“解密目录”我的意思是它无法打开并且显示一些错误消息当尝试打开它时。

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

以下是我正在使用的代码,但仅适用于 .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. 是的,AES 适用于所有数据。

  2. 没有。

  3. 是的。

  4. 压缩目录和内容,然后加密 Zip 文件。使用 HMAC 确保没有人弄乱加密文件。

你说:“请尽快回复,因为我必须在几天内提交这个项目,而我在这些问题上陷入了困境。”正如您现在了解到的,将事情留到最后一刻并不是获得良好结果的好方法:正确的计划可以防止绩效不佳。

如果你早点看问题,那么你解决问题的时间就不会太少。

关于java - 如何在java中使用AES加密除.text之外的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10980080/

相关文章:

java - MarkLogic PojoRepository 搜索范围日期不起作用

java - 前台通知操作不发送广播

java - Google Foobar,字符串清理,测试失败 5

encryption - 生成 aes256 cbc key 时使用 SHA1 作为消息摘要

java - 应用集群数据加密

javascript - 从 java 调用外部 javascript 函数

ruby - 如何在 Ruby 中创建 .p12 文件?

java - 公开源代码中的私有(private)信息

java - 如何使用另一个字符串作为密码加密/解密一个字符串?

encryption - 使用 Crypto++ 的 AES 示例