4

暗号化と.NETFrameworkに慣れてきたところです。多くの例を見た後、.NETクラスを使用するときに混乱するパターンが繰り返されているのがわかりますRfc2898DeriveBytes。このクラスを使用して暗号化キーと初期化ベクトルを取得する場合、同じメソッドが使用されているようです。

キーと初期化ベクトルの取得を示すMSDNブログのコードを次に示します。

byte[] salt = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
Rfc2898DeriveBytes pwdGen = new Rfc2898DeriveBytes("P@$$w0rd", salt, 1000);

// generate an RC2 key
byte[] key = pwdGen.GetBytes(16);
byte[] iv = pwdGen.GetBytes(8);

これは他の場所でも使われているのを見たことがあります。こんな感じだと思っていたのではないでしょうか...

// generate an RC2 key
byte[] key = pwdGen.GetKey();
byte[] iv = pwdGen.GetInitializationVector();

私はここで何かが欠けているに違いありません。キーと初期化ベクトル(IV)が単なる乱数である場合、適切なパスワードとソルトを使用すると、それらはどのように再度取得されますか?

4

1 に答える 1

6

RFC2898鍵導出アルゴリズムは決定論的です。同じ入力で実行すると、同じ出力が得られます。

同じ順序で呼び出し、同じバイト数を要求する限りGetBytes()、同じキーとIVを取得します。

実際のシステムでは、ソルトは暗号化時にランダムに生成される必要があることを忘れないでください(そして、復号化時に取得できるように保存されます)。

于 2011-03-25T01:44:50.967 に答える