How to securely store a connection string in a WinForms application?
.net, connection-string, encryption, security, vb.net
Solution
Simply , the .net framework allows you to do that , see
http://msdn.microsoft.com/en-us/library/89211k9b(v=vs.80).aspx
Relevant information:
This goes into the machine.config file:
<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
<providers>
<add name="RsaProtectedConfigurationProvider"
type="System.Configuration.RsaProtectedConfigurationProvider, ... />
<add name="DataProtectionConfigurationProvider"
type="System.Configuration.DpapiProtectedConfigurationProvider, ... />
</providers>
</configProtectedData>
And this is the application code:
Shared Sub ToggleConfigEncryption(ByVal exeConfigName As String)
' Takes the executable file name without the
' .config extension.
Try
' Open the configuration file and retrieve
' the connectionStrings section.
Dim config As Configuration = ConfigurationManager. _
OpenExeConfiguration(exeConfigName)
Dim section As ConnectionStringsSection = DirectCast( _
config.GetSection("connectionStrings"), _
ConnectionStringsSection)
If section.SectionInformation.IsProtected Then
' Remove encryption.
section.SectionInformation.UnprotectSection()
Else
' Encrypt the section.
section.SectionInformation.ProtectSection( _
"DataProtectionConfigurationProvider") 'this is an entry in machine.config
End If
' Save the current configuration.
config.Save()
Console.WriteLine("Protected={0}", _
section.SectionInformation.IsProtected)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
UPDATE 1
Thanks @wpcoder, for this link
Problem
I need to know what is the common way to store a SQL server connection string for a WinForms application in VB.NET. I have searched the net and I found answers to each of the following questions: - How do I read app.config values - How to do it in ASP.NET Reference: this SO question. - How do I store a connection string (unencrypted thus unsafe) I would like a full answer on how to store a connection string in VB.NET in `app.config` (or `settings.settings` if it's better) securely. Is `app.config` the right place? Can I encrypt these values?