2012-08-01 51 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類或其他任何可能會改變內容。

相關問題