たくさんの独立したファイルを保存するときにC#でRijndaelalg.CreateEncryptorを正しく呼び出す方法
-
17-09-2020 - |
質問
私の状況では、サーバーに保存されるファイルがいくつかあります。これらの各ファイルは、私が書いているC#アプリケーションによって作成されます。
背景: このアプリケーションでは、暗号化に必要な時間が重要ではありません。ファイルは小さくなる傾向があり、私たちはスペアにたくさんのCPUサイクルを持っています(クライアントはデータを暗号化または復号化する唯一のコンピュータです)。
各ファイルは無関係であり、Sysadminまたはハードディスクの保持を受ける人(悪い男を想定している)のスヌーピングから保護されるコンテンツが必要です(
私の理解はRijndaelalgですこの種の操作のための固体アルゴリズムですか?これが情報であると仮定すると、rijndaelalg.CreateenCryptor関数を正しく使用する方法は正しいですか?
私のユーザーがパスワードを入力するための使いやすさは、パスワードを想定しているとします。
私の質問は
です-
ユーザー入力文字列(C# '文字列)をバイト[]に変換するのが最適ですか?私は他のすべてのキャラクターに0を持っているという問題を回避するためにハッシュされるべきだと思いますか?この変換を行うための最良の方法は何ですか?
-
IVに何を使いますか?これは私の理解ですこれは(MSDNが「NULL」を渡して大丈夫ということを言うにもかかわらず)埋められる価値です。この値のために何を使いますか?私の状況に留めておき、私は独立して復号化する必要がある独立したファイルの束を持っています。
IVがよく知られている場合、これは問題ですか? (一意の値であるため、ファイル名のハッシュを使用できます)
-
同じパスワードを使って多くの独立したファイルを暗号化するためのRijndaelalgよりも優れたアルゴリズムがありますか?
解決
Q1。私は通常、文字列をバイト配列に変換するためにutf8クラスのGetBytes()メソッドを使用します。
Encoding.UTF8.GetBytes(myString)
.
Q2。RijndaelManagedクラスのインスタンスを作成するたびに、IVはランダムに生成されます(IVプロパティを使用してアクセス可能)。generyiv()メソッドを呼び出すことによってこれを再びランダム化することができます。
データを復号化するためにこのIVが必要な場合は、ファイルごとに一意のIVを持つのではなく、このIVをどこかに保存するのが良い場合があります。静的IVを使用してすべてのファイルを暗号化した場合は、ファイルを復号化したときいつでもRijndaelManagedクラスの新しいインスタンスを作成しているときに必ずIVを設定してください。
Q3。RijndaelManaged / AESはそこにある最も安全なアルゴリズムです、私はELSは何も使用しません。