我需要为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中,但问题仍然存在。为什么会这样?