就像可以加密ASP.NET应用程序中的web.config的方式一样,您也可以加密app.config。加密对于正在运行的代码是透明的,因此您无需更改代码。但是,您需要跳过一些步骤才能执行此加密,因为SDK中没有内置工具可以为台式机应用程序执行此加密,这与ASP.NET应用程序不同,后者具有regiis.exe,让您进行加密。建立自己的工具来做到这一点并不困难。只是不方便。
这样做的好处是,这是执行所需操作的最安全的方法,因为每个加密版本都是针对每台计算机/每个用户特定的(除非有人非法克隆了计算机)。需要创建自己的工具的缺点是,您必须在安装时或首次运行时执行加密。因此,您的机密仍然需要在不受保护的情况下传递给用户,直到您有机会保护它为止。
无论如何,为什么桌面应用程序直接访问(共享)数据库?如果需要保护数据库,则将Web服务放在数据库前面,并使您的应用程序针对Web服务进行身份验证,然后将其查询发送到Web服务。然后,那时存储在计算机上的唯一机密就是登录到Web服务所需的每个用户的机密。每个用户应具有自己的凭据以进行审核。
然后,用户有责任在自己的计算机上确保其凭据的安全。您可以通过使用Windows内置的DPAPI(更安全的路由)对app.config中的凭据进行即时加密和解密来帮助他们,或者仅使用.NET Framework内置的一些对称加密。对于对称加密,问题就变成了如何保护用于加密的密钥。