Rfc2898DeriveBytesを使用することと単に使用することの違いは何Encoding.ASCII.GetBytes(string object);
ですか?
私はどちらのアプローチでも比較的成功しましたが、前者はより長く曲がりくねったアプローチですが、後者は単純で要点があります。どちらも最終的には同じことができるように見えますが、前者を後者よりも使用することのポイントを理解するのに苦労しています。
私が理解できた基本的な概念は、文字列パスワードをバイト配列に変換して、たとえば対称暗号化クラスに使用できるということですAesManaged
。RFCクラスを介して、ただし、rfcオブジェクトを作成するときにsalt値とパスワードを使用できるようになります。私はそれがより安全だと思いますが、それでもそれはせいぜい知識のない推測です!また、特定のサイズのバイト配列を返すことができます。
これが私がどこから来たのかを示すためのいくつかの例です:
byte[] myPassinBytes = Encoding.ASCII.GetBytes("some password");
また
string password = "P@%5w0r]>";
byte[] saltArray = Encoding.ASCII.GetBytes("this is my salt");
Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(password, saltArray);
'rfcKey'オブジェクトは、対称暗号化アルゴリズムクラスで.Keyまたは.IVプロパティを設定するために使用できるようになりました。
すなわち。
RijndaelManaged rj = new RijndaelManaged ();
rj.Key = rfcKey.Getbytes(rj.KeySize / 8);
rj.IV = rfcKey.Getbytes(rj.Blocksize / 8);
'rj'は準備ができているはずです!
紛らわしい部分...'rfcKey'オブジェクトを使用するのではなく、'myPassInBytes'配列を使用して'rj'オブジェクトの設定に役立てることはできませんか?
私はVS2008でこれを試してみましたが、すぐに答えはNOです。しかし、RFCクラスが私が上で述べた他の代替案よりも使用される理由について、皆さんはより良い知識に基づいた答えを得ましたか?