java - Encryt --> base64 Encode-->加密文件-->base64decode-->解密--->解密文件后得到相同的输入文件格式
问题描述
我正在通过以下方式将文本文件转换为 enc 文件:
- 通读文件输入流。
- 加密
- 使用 base 64 编码。
- 使用文件输出流写入 .enc 文件。
- 通过文件输入流读取 .enc 文件
- 使用 base 64 解码。
- 解密
- 使用文件输出流写入文本文件。
我无法获得与输入文件相同的输出格式。输出是一样的。
//Encrypt
inFile = new FileInputStream(path + "/" + fileName);
outFile = new FileOutputStream(encfileName);
byte[] input = new byte[64];
int bytesRead;
while ((bytesRead = inFile.read(input)) != -1) {
byte[] output = cipher.update(input, 0, bytesRead);
if (output != null)
outFile.write(Base64.getEncoder().encode(output));
}
byte[] output = cipher.doFinal();
if (output != null)
outFile.write(Base64.getEncoder().encode(output));
//Decrypt
fis = new FileInputStream(path + "/" + encryptedFile);
fos = new FileOutputStream(decryptedFile);
byte[] in = new byte[64];
int read;
while ((read = decoder.wrap(fis).read(in)) != -1) {
byte[] output = cipher.update(in, 0, read);
if (output != null)
fos.write(output);
}
byte[] output = cipher.doFinal();
if (output != null)
fos.write(output);
有什么建议么?
解决方案
也使用包装编码器。实际上,您正在将填充字符和部分包含位的 base64 字符插入到加密数据中。
推荐阅读
- java - JMockit 返回空对象类
- sql - 如何在 SQL 中选择 3 列并执行 COUNT 进行 INNER JOIN 并将它们显示为 3 列但没有重复信息
- c# - 我们是否必须在 WinForms 应用程序中重复我们的代码?
- c++ - 使用带有多个输入参数的比较函数的 std::find_if()
- ios - 如何为 ios 270 360 480 720 1080 设置视频质量
- bash - 附加到目录中的所有文件名
- tomcat - Tomcat 在 200 响应后抛出 500 错误
- c# - Xamarin 窗体弹出
- java - java.lang.module.FindException:使用硒时
- javascript - Angularjs:向 Json 对象添加自定义属性或字段或计算