0

私の状況では、サーバーに保存されるファイルがいくつかあります。これらの各ファイルは、私が作成しているC#アプリケーションによって作成されています。

背景: このアプリケーションの場合、暗号化に必要な時間は重要ではなく、ファイルは小さい傾向があり、十分なCPUサイクルがあります(データを暗号化または復号化するコンピューターはクライアントのみです)。

各ファイルは無関係であり、システム管理者またはハードディスクを手にした人(悪意のある人を想定)がコンテンツをスヌーピングから保護する必要があります

私の理解では、RijndaelAlgはこの種の操作のための堅実なアルゴリズムですか?これが正しい情報であると仮定して、RijndaelAlg.CreateEncryptor関数を正しく使用する方法を教えてください。

私が望むユーザビリティは、ユーザーがパスワードを入力することです。パスワードが適切なパスワードであると想定します。

私の質問は

  1. ユーザーが入力した文字列(C#'文字列)をbyte []に​​変換する最善の方法は?他のすべての文字に0が含まれるという問題を回避するには、ハッシュする必要があると思いますか?この変換を行うための最良の方法は何ですか?

  2. IVには何を使用しますか?これは入力する必要のある値であると私は理解しています(MSDNは「null」を渡しても大丈夫だと言っていますが)。この値には何を使用しますか?私の状況を念頭に置いて、独立して復号化する必要のある独立したファイルがたくさんあります。

    IVがよく知られている場合、これは問題ですか?(ファイル名は一意の値なので、ファイル名のハッシュを使用できますか)

  3. 同じパスワードを使用して多くの独立したファイルを暗号化するためのRijndaelAlgよりも優れたアルゴリズムはありますか?

4

1 に答える 1

3

Q1. 通常、UTF8 クラスの GetBytes() メソッドを使用して、文字列をバイト配列に変換します。

Encoding.UTF8.GetBytes(myString)

Q2. RijndaelManaged クラスのインスタンスを作成するたびに、IV がランダムに生成されます (IV プロパティを使用してアクセスできます)。GenerateIV() メソッドを呼び出すことで、これを再度ランダム化できます。

データを復号化するためにこの IV が必要なため、ファイルごとに一意の IV を持つのではなく、この IV をどこかに保存する方がよい場合があります。静的 IV を使用してすべてのファイルを暗号化する場合は、ファイルを復号化するたびに RijndaelManaged クラスの新しいインスタンスを作成するときに、必ず IV を設定してください。

Q3. RijndaelManaged/AES は、最も安全なアルゴリズムです。それ以外は使用しません。

于 2010-07-17T23:46:21.550 に答える