嗨,我已经探索了许多关于AES加密的好网站,大多数网站将很好地详细介绍如何加密文件,并真正帮助我理解AES加密。
但是我仍然不清楚如何产生加密的文件。本教程示例解释了如何进行AES加密,但我仍然看不到物理加密文件。大多数示例只显示了如何加密和解密,而没有说明如何生成加密的物理文件。
我的问题是我们如何实际生产一个实际的加密文件,我相信这个问题是相关的公民,因为这可能会帮助其他人在未来。
回答下面的代码将加密一个文本文件与物理加密文件。
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所建议,这不适用于加密大文件。当我完成我的研究时,我会提供新的答案。
您的代码不正确;您尝试从文件中读取字节,然后将其放入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
不适合二进制数据是非常重要的。更多详情请看此链接。
问题内容: 我正在写某种生成加密日志文件的记录器。不幸的是,密码学不是我的强项。现在,我可以向文件写入几条消息,然后关闭文件。然后我可以打开它,附加一些消息,再次关闭,解密后,我在文件中间看到填充字节。有什么方法可以处理加密文件,而不必每次我想添加一些消息时都对其解密? 编辑 :更多细节。当前实现使用CipherOutputStream。据我了解,没有办法 寻求 使用它。如果我将控制输出数据大小可
问题内容: 我需要知道如何创建AES并使用它来加密和解密Java中的文件。 问题答案: 尝试使用并传入。有关快速示例,请参见http://www.java2s.com/Tutorial/Java/0490__Security/UsingCipherOutputStream.htm,而仅使用它。
我正在使用这样的代码来加密文件。 但是,尽管此代码成功加密。txt和。xml文件,它不适用于其他文件类型,例如。docx或图像文件格式。我可以对代码进行哪些更改以将功能扩展到所有此类文件类型?
我正在尝试构建一个程序,该程序接收一个文件(任意大小的EXE),对其进行加密并将其复制到一个结构中。然后稍后对其进行解密,并确保其与使用时相同。 我有一个艰难的时间加密,然后解密文件。它似乎没有正确加密,我不知道如何测试它。 以下是我的问题: 我在这里做错了什么? 是否有更好的库使用AES加密?或者我应该坚持openSSL 让我们说我想用另一个键说“你好世界”。我能不能用这个字符串作为加密算法的参
我正在开发一个功能,需要Aes加密(Aes/CBC/PKCS5Padding)密码文本从客户端发送到后端有ASP.NET的服务器。 我在服务器端有一个解密功能如下: 我包含了用于SHA-256和AES密码计算的CryptoJS库。下面是我实现的代码。 问题是,编码后的字符串不能解密回其以前的形式。我认为客户端的加密逻辑和服务器端的解密逻辑存在一定的不匹配。 当我将CryptoJS加密密码传递给ja
问题内容: 我需要使用以下命令在JAVA中解密在UNIX中加密的文件: 我必须像在UNIX中一样在Java中解密 有人可以给我一个Java代码来执行此操作吗? 问题答案: OpenSSL通常使用自己的基于密码的密钥派生方法,该方法在中指定EVP_BytesToKey,请参见下面的代码。此外,它会在多行中隐式地将密文编码为base 64,以便在邮件正文中发送密文。 因此,结果是伪代码: 因此解密为: