1

入力として同じ IV、キー、反復、ソルトを使用すると、生成される 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 オブジェクトが変更され、値の復号化に使用できなくなるのではないかと心配しています。

4

1 に答える 1

3

はい。質問で指定したように入力とアルゴリズムが固定されている限り、同じ入力が与えられても同じキーが生成され続けます。コードをループで実行し、毎回印刷するだけで、これをテストできるはずです。

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

さらに、APIはパスワード以外の不変オブジェクトを指定します。パスワード(a char[])の場合、APIは、ユーザーがPBE操作後に値を上書きできることを指定します。

原則として、から派生したクラスSecretKeySpecは可変インターフェースを実装できることに注意してください。SecretKeySpecただし、拡張され、変更可能であり、keyfactoryクラスまたはその他のクラスがコンテンツを変更する可能性はほとんどありません。

于 2012-08-01T01:55:07.160 に答える