Java FileInputStream每次运行都会提供随机输出

时间:2019-02-08 19:48:41

标签: java io aes

我需要为AES加密文件生成一个IV,我正在这样做:

private void generateIv() {
    SecureRandom rnd = new SecureRandom();

    byte tempiv[] = new byte[16];
    rnd.nextBytes(tempiv); 

    System.out.println("IV Generated: " + tempiv.toString() + ", Length: " + tempiv.length);

    try{
        File outfile = new File("initvector.iv");
        FileOutputStream ivfile = new FileOutputStream(outfile);  
        DataOutputStream dos = new DataOutputStream(ivfile);
        dos.write(tempiv);
        ivfile.close();
        dos.close();
    } catch(Exception e){
        e.printStackTrace();
    }
}

然后,我将其显示在控制台上,如下所示:

private void displayiv() {
    FileInputStream ivout = null;

    try {
        ivout = new FileInputStream("initvector.iv");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    // DataInputStream dis = new DataInputStream(ivout);

     byte[] fileiv = new byte[16];

     try {
        ivout.read(fileiv);
        //dis.close();
        ivout.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

     System.out.println(fileiv);
}

但是问题是每次我调用displayiv()方法时输出都是不同的...这是来自控制台的示例输出。

IV Generated: [B@6276ae34, Length: 16
[B@42dafa95
[B@6500df86
[B@402a079c
[B@59ec2012

如您所见,iv生成很好,但是每次尝试从文件读取iv都会得到不同的结果。在displayiv()方法中,我还尝试将fileinputstream包装在DataInputStream中,但问题仍然存在。为什么会这样?

0 个答案:

没有答案