您好我已经探索了很多关于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建议的那样,这不是用于加密大文件的套件。当我完成研究时,我会提供新的答案。
答案 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。