Java:将byte []写入文件(缺少字节)

时间:2016-06-02 08:40:30

标签: java file byte

我的代码遇到了一些问题。

当我尝试每次使用函数byte[]将文件Files.write write(例如,长度为173517)写入文件随机字节(例如3355)时,我得到一个不同的值。

这是我的代码:

byte[] dataBytes = Files.readAllBytes(Paths.get(file.getAbsolutePath()));
byte[] cipByte = cipher.doFinal(dataBytes);
byte[] encr = Base64.getEncoder().encode(cipByte);
Files.write(Paths.get(encryptedFile.getAbsolutePath()), encr); //encr len = 173517

2 个答案:

答案 0 :(得分:0)

从我的测试来看,问题似乎不是Files.write。我设法编写了一个大小为 94486449 的字节数组,没有任何问题 对于未达到预期效果的可能问题:

  • 密码未按预期执行,cipByte的大小与预期不同。
  • 编码器没有按照您的预期进行操作。请注意,如果调用Base64.getEncoder.encode(cipByte),生成的字节数组的大小不会与cipByte相同,但会有不同的大小。

答案 1 :(得分:0)

您确定要检查右侧encryptedFile吗?

您的片段中包含缺少的部分会产生有效的输出。

byte[] dataBytes = "text to be encrypted".getBytes(StandardCharsets.ISO_8859_1);

Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
SecretKey key = KeyGenerator.getInstance("DES").generateKey();
cipher.init(Cipher.ENCRYPT_MODE, key);

byte[] cipByte = cipher.doFinal(dataBytes);
byte[] encr = Base64.getEncoder().encode(cipByte);

File encryptedFile = new File("/tmp/in.enc");
Files.write(Paths.get(encryptedFile.getAbsolutePath()), encr);

System.out.println("encr length: " + encr.length);
System.out.println("file length: " + encryptedFile.length());

输出

encr length: 32
file length: 32