使用相同的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对象会被更改,并且无法用于解密该值。
答案 0 :(得分:3)
是。只要输入和算法按照您在问题中指定的方式固定,它将在给定相同输入的情况下继续生成相同的密钥。您应该能够通过循环运行代码并通过
每次打印来测试它System.out.println(Arrays.toString(secret.getEncoded));
此外,API指定除密码之外的不可变对象。对于密码(char[]
),API指定用户可能会在PBE操作后覆盖该值。
请注意,原则上从SecretKeySpec
派生的类可以实现可变接口。 SecretKeySpec
扩展,可变,并且keyfactory类或任何其他类都会改变内容的可能性极小。