Je veux crypter le mot de passe dans la chaîne de connexion. Lorsque je me connecte à une base de données, la chaîne de connexion est stockée ouvertement dans App.config et je dois trouver un moyen de ne garder que le mot de passe crypté.
Disons que c'est votre chaîne de connexion:
<connectionStrings>
<add name="cs" connectionString="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=XXSDFASFDKSFJDKLJFDWERIODFSDFHSDJHKJNFJKSD;"/>
</connectionStrings>
Ensuite, vous pouvez faire quelque chose comme ceci:
string myCs = System.Configuration.ConfigurationManager.ConnectionStrings["cs"].ConnectionString;
System.Data.SqlClient.SqlConnectionStringBuilder csb = new System.Data.SqlClient.SqlConnectionStringBuilder(myCs);
csb.Password = EncDecHelper.Decrypt(csb.Password);
myCs = csb.ToString();
Tu peux écrire EncDecHelper.Decrypt
en utilisant des exemples d'ici: Crypter et décrypter une chaîne
Utilisez la section de configuration connectionStrings
et cryptez la section entière - au lieu du simple mot de passe.
C'est plus sûr car la configuration de votre application n'aura plus les noms de serveur et les noms d'utilisateur en texte brut.
Il existe des documents pratiques pour crypter les sections de configuration sur MSDN pour RSA ou DPAPI .
En plus des autres réponses, n'est-il pas préférable d'utiliser le fichier dans le contrôle de code source comme modèle, avec juste des chaînes de connexion chiffrées dev/test pour qu'il fonctionne dans dev/test.
Pour la production (ou d'autres environnements dans lesquels l'application est déployée), le fichier d'informations d'identification chiffré est généré séparément au format de modèle spécifié, géré/mis à jour/déployé séparément, a des autorisations de sécurité appropriées appliquées, jamais vu par quelqu'un d'autre que DBA/DevOps.