如何使用AES生成实际加密文件? [JAVA]

时间:2014-03-31 06:23:00

标签: java encryption aes

您好我已经探索了很多关于AES加密的好网站,大多数网站都会详细介绍如何加密文件并真正帮助我理解AES加密。

但我仍然不清楚如何生成加密的文件。这个tutorial example解释了AES加密是如何完成的,但我仍然看不到物理加密文件。大多数示例仅显示如何加密和解密,但没有解释如何生成加密的物理文件。

我的问题是我们如何实际生成实际的加密文件,我相信这个问题与SO公民有关,因为这可能在将来帮助其他人。

答案 下面的代码将使用物理加密文件加密文本文件。

final Path origFile = Paths.get("C:\\3.txt");
final byte[] contents = Files.readAllBytes(origFile);

// 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(contents.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);

   final Path newFile = Paths.get("C:\\3encrypted.aes");
   Files.write(newFile, encrypted, StandardOpenOption.CREATE);

     }

正如fge建议的那样,这不是用于加密大文件的套件。当我完成研究时,我会提供新的答案。

1 个答案:

答案 0 :(得分:1)

您的代码不正确;您尝试从文件中读取字节,然后将其放入StringBuffer,这是一个字符序列。不要那样做!

直接读取字节:

final Path origFile = Paths.get("C:\\3.txt");
final byte[] contents = Files.readAllBytes(origFile);

然后像你一样加密,并将你的encrypted字节数组写入一个新文件:

final Path newFile = Paths.get("C:\\3encrypted.aes"); // or another name
Files.write(newFile, encrypted, StandardOpenOption.CREATE);

了解 String不适合二进制数据非常重要。有关详细信息,请参阅this link