コード内に機密パスワードを保存する必要があります。パスワード自体が必要なため、ハッシュ技術を使用できません。これらのデータを app.config ファイル内に安全に保存するにはどうすればよいですか?
これを安全に達成できる他の方法はありますか?
キーはシステム固有であるため、DPAPI および ProtectData クラスはオプションではありません。たとえば、異なるエンド ユーザー システムに対して接続文字列をこの方法で保存することはできません。
コード内に機密パスワードを保存する必要があります。パスワード自体が必要なため、ハッシュ技術を使用できません。これらのデータを app.config ファイル内に安全に保存するにはどうすればよいですか?
これを安全に達成できる他の方法はありますか?
キーはシステム固有であるため、DPAPI および ProtectData クラスはオプションではありません。たとえば、異なるエンド ユーザー システムに対して接続文字列をこの方法で保存することはできません。
DPAPI (データ保護 API) を使用して、構成ファイルの特定のセクションを暗号化できます。コードは引き続き ConfigurationManager を使用し、復号化はフレームワークによって処理されます。同じことの詳細については、このパターンとプラクティスのドキュメント「How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI」を参照してください。
アップデート
コードからの情報を暗号化または復号化するには、 ProtectedData.ProtectおよびProtectedData.Unprotectを使用できます。これは、インストーラーのカスタム アクションの一部として、またはユーザーがアプリケーションを使用するときに資格情報を入力するときに実行できます。
サンプルコード
class SecureStringManager
{
readonly Encoding _encoding = Encoding.Unicode;
public string Unprotect(string encryptedString)
{
byte[] protectedData = Convert.FromBase64String(encryptedString);
byte[] unprotectedData = ProtectedData.Unprotect(protectedData,
null, DataProtectionScope.CurrentUser);
return _encoding.GetString(unprotectedData);
}
public string Protect(string unprotectedString)
{
byte[] unprotectedData = _encoding.GetBytes(unprotectedString);
byte[] protectedData = ProtectedData.Protect(unprotectedData,
null, DataProtectionScope.CurrentUser);
return Convert.ToBase64String(protectedData);
}
}