1

何かを暗号化したいとき、復号化するキーを乱数ジェネレーターによって生成するのではなく、自分で決定する必要はありませんか?

このコードは、stackoverflow の投稿に表示されます。しかし、キーをランダムに生成したくありません.ユーザーにキーの入力を求め、そのベースで暗号化を行う必要があります..

コードをどのように変更すればよいですか?

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(password, salt, 1024, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
4

2 に答える 2

1

暗号化の全体的な考え方は、鍵が唯一の秘密であるため、必要な関係者以外は誰も鍵を推測できないということです。

自分でキーを選択すると、習慣的なパターンに従う可能性が高くなります。そのため、1 つのキーを侵害すると、そのパターンが公開され、攻撃者はその情報を使用して、使用する他のキーを簡単に見つけることができます。優れた乱数ジェネレーターを使用すると、この可能性が排除され、暗号化がはるかに効率的になります。

于 2009-11-19T06:59:06.977 に答える
0

表示するコードは、ランダム キーを生成しません。生成されたキーはパスワードの関数であり、特定のパスワードが使用されるたびにまったく同じになります。

この場合、ユーザーはpassword. そのパスワードは、暗号化キーとして使用できるバイト文字列を決定論的に生成するアルゴリズムのシードとして使用されます。

操作ごとにランダムに選択する必要があるものがあります。CBC モードで暗号化に使用される初期化ベクトルです。これにより、同じ平文を暗号化するために同じ鍵が使用された場合でも、異なる暗号文が生成されます。

于 2009-11-19T07:17:58.740 に答える