2012-08-01 53 views
1

使用相同的IV,密钥,迭代和salt作为输入,每次生成的PBEKeySpec都一样吗?那就是:PBEKeySpec可以在Java中重用吗?

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对象被改变,不能用来解密值。

回答

3

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

System.out.println(Arrays.toString(secret.getEncoded)); 

而且测试,该API指定除了密码不可变对象。对于密码(a char[]),API指定在PBE操作后用户可能会覆盖该值。

请注意,原则上来自SecretKeySpec的类可以实现可变接口。 SecretKeySpec是不可能扩展的,可变的,并且keyfactory类或其他任何可能会改变内容。