.NET Frameworkの次のメソッドを使用して、データを保護できます。それらはデータを保護するために内部でDPAPIを使用し、システムDLL呼び出しをいじくり回すことなく、C#またはVB.NETで直接使用できます。
namespace System.Security.Cryptography
{
// Summary:
// Provides methods for protecting and unprotecting data. This class cannot
// be inherited.
public sealed class ProtectedData
{
public static byte[] Protect(byte[] userData,
byte[] optionalEntropy, DataProtectionScope scope);
public static byte[] Unprotect(byte[] encryptedData,
byte[] optionalEntropy, DataProtectionScope scope);
}
}
これを使用するには、プロジェクトへの参照を追加System.Security
します。バイト配列を使用して、保護されたデータにSALToptionalEntropy
を追加することを強くお勧めします(保護するデータに固有のランダムな値をバイト配列に追加します)。
scope
を使用できます。DataProtectionScope.CurrentUser
これにより、データが暗号化され、現在のユーザーの資格情報で保護されます。
シナリオによってDataProtectionScope.LocalMachine
は、も便利です。この場合、保護されたデータはマシンコンテキストに関連付けられます。この設定を使用すると、コンピューターで実行されているすべてのプロセスがデータの保護を解除できます。これは通常、信頼できないユーザーがアクセスを許可されていないサーバーで実行されるサーバー固有のアプリケーションで使用されます。
このメソッドを使用しProtect
てデータを暗号化し、で復号化しUnprotect
ます。アプリケーションの要件(ファイル、データベース、レジストリなど)に応じて、返されたバイト配列を格納できます。
これらのメソッドの詳細については、MSDNを参照してください。
コードサンプルについて、およびアプリケーションの.configファイルの一部を暗号化することに関心がある場合は、次を確認してください。
SALTを使用することをお勧めします(optionalEntropy
パラメーターを使用して)-レインボーテーブル攻撃から保護します。
私が言及したいDPAPIソリューションの1つの欠点があります。キーは、Windowsクレデンシャルに基づいて生成されます。つまり、Windowsクレデンシャルにアクセスできる人は誰でも、保護されたデータにアクセスできる可能性があります。アカウントで実行されているプログラムは、保護されたデータにもアクセスできます。