2017-02-17 115 views
0

我试图使AES加密,我正在生成盐。但是我遇到了一些问题。下面的代码工作正常,但每当我加密第二个等文件,文件中的盐被覆盖。有关如何将salt byte []添加到salt fil中而不覆盖它的任何建议?如何将字节数组附加到文件而不覆盖它使用java

伙计们..我更新了我的代码..感谢那部分,虽然它修复了覆盖问题,但它并没有使它到下一行。

输出我的文件:?〜V“A·Ò²Ö4ô|ŒT‰mÊî0'Z^'U•苏克·=这是二盐结合

任何想法如何使它在追加下一行

我想saltoutfile.write( “/ N”),但不工作

public byte[] generateSalt() throws IOException{ 
      //generate Salt value 
      // password, iv and salt should be transferred to the other end 
      // in a secure manner 
      // salt is used for encoding 
      // writing it to a file 
      // salt should be transferred to the recipient securely 
      // for decryption 
    byte[] salt = new byte[8]; 
    SecureRandom secureRandom = new SecureRandom(); 
    secureRandom.nextBytes(salt); 
      FileOutputStream saltOutFile = new FileOutputStream("C:\\KryptZIP\\salt.enc" , true); 
      saltOutFile.write(salt); 
     saltOutFile.close(); 
      return salt; 


} 
在评论中提及

:这是我读盐值

public static byte[] readSalt() throws IOException{ 
    // reading the salt 
      // user should have secure mechanism to transfer the 
      // salt, iv and password to the recipient 
      FileInputStream saltFis = new FileInputStream("C:\\KryptZIP\\salt.enc"); 
      byte[] salt = new byte[8]; 
      saltFis.read(salt); 
      saltFis.close(); 
      return salt; 
} 
+0

出了什么问题['新的FileOutputStream中(文件名,真实)'](https://docs.oracle.com/javase/8/docs/api/java/ IO/FileOutputStream.html#FileOutputStream中,java.lang.String中-boolean-)? – Seelenvirtuose

+0

我没有看到任何问题。每次运行代码时,它会将8个字节的数据附加到salt文件中。 – anacron

+0

假设我使用这个: FileOutputStream saltOutFile = new FileOutputStream(“C:\\ KryptZIP \\ salt.enc”,true); 这会将下一个盐添加到盐文件?因为我不知道它是否会显示为下一行 –

回答

0

使用Apache FileUtils。使用方法

FileUtils.writeByteArrayToFile(java.io.File file,bytes[] content,boolean append) 
+0

为什么使用整个库,如果一个简单的['new FileOutputStream(filename,true)'](https://docs.oracle.com/javase/8/docs/api/java/io/FileOutputStream.html#FileOutputStream- java.lang.String-boolean-)会做什么? – Seelenvirtuose

+0

作为库句柄来关闭资源 –

4

您需要使用带有2个参数的FileOutputStream的构造函数。第二个参数是一个布尔标志,指示您是否想从(false)开始附加true)到文件或写入

你的代码更改为:

FileOutputStream saltOutFile = new FileOutputStream("C:\\KryptZIP\\salt.enc", true); 
+0

不错的解决方案bro。但任何想法如何使下一行盐,而不是在行的末尾? –

+0

你总是可以在盐的末尾写一个换行符('saltOutFile.write('\ n');')。但既然这是二进制数据,你为什么要这么做?在任何情况下,您都无法使用文本编辑器阅读它。 –

+0

原因是我使用它进行加密,目前我无法读取正确加密的正确盐。 例子我加密A.产生盐A.存储到盐文件 当我加密B.生成盐B ..存储B文件。 我无法确定哪个盐是哪个..因此plannig使它成为不同的线 –

相关问题