如何保护app.config,虽然它打算在几台机器上使用?

时间:2012-08-14 11:21:08

标签: c# app-config

我想创建一个连接到中央远程数据库的应用程序,该应用程序旨在提供给在本地网络中的计算机上使用的多个用户。我们面临的主要挑战是隐藏用户的连接字符串,以防止潜在的恶意使用 到目前为止,我发现我必须使用there描述的RsaProtectedConfigurationProvider类来加密app.config,并解密它。但我无法弄清楚如何向客户提供所需的RSA密钥?以及所有这些如何阻止破解者找到密钥并使用它来解密app.config

thanx everyone;)

3 个答案:

答案 0 :(得分:3)

如果您仔细阅读MSDN上web farm secenarios文章的How To: Encrypt Configuration Sections in ASP.NET 2.0 Using RSA,您将看到如何创建密钥并从中提取私钥和公钥,以便在不同的密钥上安装公钥机等。

要点:

  1. 创建自定义键:

    aspnet_regiis -pc "CustomKeys" -exp
    
  2. 在配置文件中添加configProtectedData部分,以使用自定义键

  3. 加密想要的部分

  4. 导出密钥:

    aspnet_regiis -px "CustomKeys" "C:\CustomKeys.xml" -pri
    
  5. 复制并导入其他计算机中的密钥:

    aspnet_regiis -pi "CustomKeys" "C:\CustomKeys.xml"
    

答案 1 :(得分:3)

  

我们面临的主要挑战是隐藏用户的连接字符串

您不能让用户拥有直接连接到数据库的客户端应用程序,并且希望能够隐藏连接字符串。这是不可能做到的。

如果连接字符串必须保密,请将其存储在服务器上,让客户端应用程序连接到Web服务,而不是直接连接到数据库。

答案 2 :(得分:0)

这些天,我遇到了同样的问题,并找到了另一个解决方案,虽然它不是很优雅,但是对我有用。 我使用AES算法通过我定义的密钥对连接字符串进行加密,然后将结果字符串替换为配置文件。 然后,我在应用中添加了具有相同密钥的解密函数,并将其用于get connectionstring方法,如下所示:

public string myConnectionString {
    get {
        return ((new Cypher().Decrypt(this["myConnectionString"].ToString())));
    }
}

主要缺点是编译时可能会覆盖这些更改,因此最好在应用程序就绪时进行更改。 我使用了在这里找到的用于加密/解密的方法: AES Encryption Decryption (Cryptography) Tutorial with example in ASP.Net using C# and VB.Net