.Net加密

.Net加密,.net,encryption,clickonce,connection-string,app-config,.net,Encryption,Clickonce,Connection String,App Config,我想知道的是加密配置文件中连接字符串的确切方法。以下是我的问题: 使用机器级加密,任何访问我的服务器的人都不能编写一个小小的.Net程序来读取连接字符串的内容吗 如果我将应用程序部署到企业环境中的用户计算机上,并且应用程序在配置文件中具有连接字符串,那么如何确保只有我的应用程序才能对其进行解密?该场景在ClickOnce部署场景中特别有趣。我读过一些关于人们在发布服务器上存储未加密的配置,并在第一次下载、安装和执行应用程序时在机器级别进行加密的文章。对我来说,这听起来太错误了——连接字符串在电线

我想知道的是加密配置文件中连接字符串的确切方法。以下是我的问题:

  • 使用机器级加密,任何访问我的服务器的人都不能编写一个小小的.Net程序来读取连接字符串的内容吗

  • 如果我将应用程序部署到企业环境中的用户计算机上,并且应用程序在配置文件中具有连接字符串,那么如何确保只有我的应用程序才能对其进行解密?该场景在ClickOnce部署场景中特别有趣。我读过一些关于人们在发布服务器上存储未加密的配置,并在第一次下载、安装和执行应用程序时在机器级别进行加密的文章。对我来说,这听起来太错误了——连接字符串在电线中不受保护地压缩,并且在下载和应用程序执行之间的一小段时间内处于不受保护的状态

  • 我是否可以拥有公钥和私钥,对我的应用程序进行签名,用密钥加密配置文件,并且当用户执行它时,只能从签名的应用程序进行解密

  • 由于我使用的是ClickOnce,我可以在代码中或嵌入加密的敏感信息,因为ClickOnce不会检测到更改,除非版本发生更改。因此,如果我需要在更改连接字符串时重新编译,app.config的点将被禁用。除了使用配置文件之外,我还可以采取哪些其他方法来实现对服务器、客户端以及两者之间的连接字符串的保护


  • 好问题,事实上


    你不能确定没有人会解密你的连接字符串(或密码)。当然,您可以对其进行加密,但人们将能够对您的应用程序进行反编译,并查看您使用的加密算法以及用于解密连接字符串/密码的密钥。也许这更像是一个极端的场景,但这是可能的(我在学生时代是一个邪恶的破坏者:)。因此,如果您害怕这种情况,您必须保护您的应用程序,使其更难反汇编。这是另一个讨论的主题,但例如,您可以使用或其他好的模糊器-这将使破解人员更难理解应用程序内部的情况。
    因此,一个可能的解决方案可以是“加密连接字符串+使用模糊器”,但是,正如我所说,它不会为您提供100%的保护。

    使用对称加密存储机密总是有问题的,只要您不想提示密码或使用其他技术解决方案来解密您的机密(如特殊硬件)。当您必须将完整的密钥存储在系统中的任何位置时,其他人都可以检索它

    我肯定会尝试使用操作系统的机制。使用MS-SQL在纯windows环境中工作时,应使用集成安全性,而不是用户/密码。其他数据库也可能具有类似的功能。
    另一个(较弱的)选项是使用操作系统的安全设置来保护明文文件-只有用户才能访问该文件。但是,您和您的用户必须信任管理员。在这种情况下,还应使用对称加密。但请看我的第一个论点——这并不是真正安全的

  • 对。使用机器密钥加密的秘密可以由任何访问机器密钥的进程解密。使用用户密钥加密的秘密可以由同一用户启动的任何进程解密
  • 这是不可能的。所有相反的说法都是蛇油。您的应用程序需要一个秘密来解密某些内容。没有已知的在应用程序中隐藏秘密的方案。有各种各样的模糊处理方案,但没有防弹的。你所能做的就是提高标准
  • 不可以。要么应用程序有用于解密的密钥,在这种情况下,您可以返回第2点,要么应用程序有公钥,在这种情况下,任何人都可以解密相同的密钥,因此您基本上对配置进行验证(未被篡改),但配置不是机密的
  • 无法在应用程序中安全地部署嵌入的机密。只是价格有多高的问题,如果你的受保护资产(秘密)值得,那么黑客就会得到它
    加密基础设施旨在保护当前用户的机密不被其他用户窃取。它不是为了保护应用程序的机密不被用户使用。您需要的不是加密,而是DRM,您需要查看DRM基础架构以获得答案。我不知道世界上有一个托管库。

    Gustavo您可以实现这一点(这是我的应用程序计划,基于登录)


    用户在.Net应用程序中输入凭据。凭证被传递到一个.php服务器端应用程序,该应用程序使用凭证登录数据库,检索一个密钥并将其传递回.Net应用程序。然后在.Net应用程序中的硬编码加密连接字符串上使用该密钥,以允许完全访问数据库。

    您能更深入地描述您的第一个问题吗?什么是“机器级”加密?据我所知,您可以使用内置加密在机器级和用户级进行加密。例如,使用configSection.SectionInformation.ProtectSection(“RSAProtectedConfigurationProvider”);或者通过aspnet_regais.exe,也许详细说明昨天提出的问题()比创建一个措辞不同的重复问题更有意义。今天的最终加密方法是明天的愚蠢。看来是这样。谢谢鲁萨努。我感谢你的帮助。