I just deleted an old post because I re-read it and I was attempting my own crypto on config files instead of using DPAPI. I reserve the right to delete old posts if they turn out to be complete bollocks.
Just to show how you encrypt an app config file on a machine where you do not have IIS installed and cannot use the traditional aspnet_regiis command-line tool that your first googlebing will tell you all about – I give you the below piece of code.
Note that you need to encrypt the file on the target machine as DPAPI is machine specific, so there will be a brief moment when the file is on disk in clear text which is a basic flaw of the entire DPAPI concept, but at least you are not rolling your own crypto.
static int Main(string[] args) { if (args.Length != 1) Console.Error.WriteLine("Wrong number of arguments.\r\n{0} <configfile_to_encrypt>", GetExeName()); return EncyptAppSettings(args[0]); } private static int EncyptAppSettings(string pathToFile) { if (!File.Exists(pathToFile)) return LogFatalError(string.Format("Executable {0} not found", pathToFile), 2); if (!File.Exists(pathToFile + ".config")) return LogFatalError(string.Format("Config file {0} not found", pathToFile), 3); var configuration = ConfigurationManager.OpenExeConfiguration(pathToFile); var appSettings = configuration.GetSection("appSettings") as AppSettingsSection; appSettings.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); appSettings.SectionInformation.ForceSave = true; configuration.Save(); return 0; } private static int LogFatalError(string message, int exitCode) { Console.Error.WriteLine("{0} failed: {1}", GetExeName(), message); return exitCode; } private static string GetExeName() { return Process.GetCurrentProcess().ProcessName; }