file.encrypt は、実際には透過的なEFS を使用します。暗号化; ユーザー アカウントにはマスター証明書が保存されるため、そのアカウントでログインしたユーザーは、任意のアプリケーションでファイルの内容にアクセスできます。必要なものによっては、それがまったく必要ない場合があります。アプリだけで EFS の動作を再現したい場合は、マスター パスワードをユーザーのプライベート ファイルのどこかに保存し、データ ファイルを「キー」セクションと「データ」セクションに分割し、キーをマスター パスワードで暗号化するだけです。(Real EFS にはいくつかの微妙な点があります。多くの異なるユーザーのパスワードを個別に暗号化できるため、異なるユーザーがファイルごとにアクセスできるようになり、メイン ユーザーのパスワードが失われた場合の回復オプションが提供されます。また、ユーザーのパスワードを使用してファイルを暗号化します。マスター パスワードなので、誰かがパスワードを変更すると、ファイルを開くことができなくなります。)
基本的な方法は、ユーザーにパスワードの入力を求め、それを使用して一度に文字列を暗号化するのではなく、ファイル全体を一度に暗号化または復号化することです。暗号化されていない方法でファイルをシリアル化し、そのバイト配列全体をEncryptStringToBytes_Aesのようなものに渡します。文字列の代わりにバイトを書き込んでいる場合の唯一の違いは次のとおりです。
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
に
csEncrypt.Write(plainText);
いずれにせよ、使用する実際の暗号にはAesCryptoServiceProvider
ではなくRSACryptoServiceProvider
を使用します。これは、AES および同様のアルゴリズムに渡されるキー/パスワードのトップレベルの認証と暗号化に使用されます。ファイル全体を暗号化するために使用されることはめったになく、使用すると非常に遅くなります。