PBEKeySpec是否可以在Java中重用?

时间:2012-08-01 01:43:29

标签: java encryption aes

使用相同的IV,key,iteration和salt作为输入,每次生成的PBEKeySpec是否相同?那就是:

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWithSHA256And256BitAES-CBC-BC");
KeySpec spec = new PBEKeySpec(secureKey.toCharArray(), SALT.getBytes(), KEY_ITERATION, KEY_LENGTH);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");

我每次都会获得相同的SecretKey吗? 我只是担心用户下次启动程序时,SecretKey对象会被更改,并且无法用于解密该值。

1 个答案:

答案 0 :(得分:3)

是。只要输入和算法按照您在问题中指定的方式固定,它将在给定相同输入的情况下继续生成相同的密钥。您应该能够通过循环运行代码并通过

每次打印来测试它
System.out.println(Arrays.toString(secret.getEncoded));

此外,API指定除密码之外的不可变对象。对于密码(char[]),API指定用户可能会在PBE操作后覆盖该值。

请注意,原则上从SecretKeySpec派生的类可以实现可变接口。 SecretKeySpec扩展,可变,并且keyfactory类或任何其他类都会改变内容的可能性极小。