【问题标题】:Encryption from c# application来自 c# 应用程序的加密
【发布时间】:2011-02-28 21:43:16
【问题描述】:

情况: 我需要在我的远程数据库和我的 c# 应用程序之间进行加密。我不知道我在做什么(之前从未做过任何加密),我在网上找到的所有东西都是针对 asp.net 并处理 web.config 文件的。

一些相关数据: 我的连接字符串包含 SQL 服务器身份验证的密码信息,有一个选择和一个删除语句。这三样东西都需要加密。

我正在使用 SQL Server 2008、Visual Studio 2008 和 C#。

我怀疑这是否相关,但这发生在 Windows 服务中。到目前为止,在 winForms 中工作的任何与 SQL 相关的东西在服务中都对我有用,所以任何与 winForms 相关的帮助也很感激。

我需要什么帮助:

  1. 任何不限于 asp.net 的加密参考将不胜感激。 :)

  2. 我看到了MSDN page,这似乎是一个不错的起点,但我有点困惑。这似乎是 2 个应用程序相互发送文件的方式,而不是向 SQL Server 发送加密的内容?使用这个,我不明白 SQL Server 怎么知道如何解密它?

  3. 我在 System.Security.Cryptography 的左侧字段中是否有出路?是否有某种方法可以在 System.Data.SqlClient 中指定加密,或者我将不得不求助于在远程服务器上创建存储过程?

提前谢谢你!!! :)

总结:

感谢大家让我走上正确的道路,很难只选择一个答案! :)

我已经得出结论,我需要使用 SSL,虽然我对操作方法有很多困惑,但我知道这需要证书,并且一旦设置了证书,客户端就可以请求通过在连接字符串中询问“Encrypt=yes”来进行加密。幸运的是,我相信我已经有了一个可以使用的。

另一件需要注意的事情 - TDE 是关于什么有利于加密仅位于数据库中的数据的共识,而 SSL 是用于传输加密数据的。

以下是我认为最有帮助的几个链接:

http://blogs.msdn.com/b/sql_protocols/archive/2005/10/04/476705.aspx

http://support.microsoft.com/default.aspx?scid=kb;en-us;316898

【问题讨论】:

  • 请原谅我问这是否很明显,但为什么需要加密选择/删除语句?我了解在应用程序中加密的连接字符串,但是查询..? 编辑 阅读其中一个答案让我意识到您的意思是加密 SQL 和您的应用程序之间的结果集(希望如此),这是有道理的 - 使用 SSL。
  • 是的,加密结果集!敏感数据将保存在远程数据库中,我需要一种安全的方式将其取出。 :)

标签: c# sql sql-server encryption public-key


【解决方案1】:

对于应用程序和数据库之间的加密,最好的办法是在 SQL Server 级别使用 SSL 证书。这是关于它的 Microsoft 知识库文章(适用于旧版本的 SQL Server)。 http://support.microsoft.com/kb/316898 这将防止嗅探器。

我们使用信用卡申请表完成了这项工作,而且非常简单。

This Microsoft.com search 将帮助您使用较新版本的 SQL Server。

本文将对 SQL Server 2008 有所帮助。http://msdn.microsoft.com/en-us/library/cc278098.aspx

【讨论】:

  • 这是一个 bing 搜索,你这个骗子 :)
  • 感谢您的回答。 :) 搜索很快就让我找到了一个叫做 TDE 的东西,这也是你用的吗?
  • 不,TDE 不同于在数据通过网络移动时对其进行加密。 TDE 用于加密数据库中的数据。如果我理解正确,则在将其发送到您的应用程序之前需要由数据库对其进行解密。如果您想保护数据在网络中移动时免受嗅探器的攻击,则需要使用 SSL。
  • 啊,谢谢。在这种情况下,我将在稍后研究 TDE。
【解决方案2】:

您需要保护应用程序和 SQL Server 之间的流量。为此,只需按照Encrypting Connections to SQL Server 中描述的步骤操作即可。

接下来,如果您确实存储了敏感数据,您希望将其加密存储在数据库中,以防止意外的媒体丢失。到目前为止,最好的解决方案是使用Transparent Database Encryption

这些解决方案都不需要在您的应用程序中更改任何一行代码。它们都是部署时间,管理员控制的设置。尝试推出自己的密码学解决方案会让你一事无成。在密码学中非常容易搞砸,你甚至都不知道。通过简单地利用 SQL 提供的加密功能(连接 TLS、存储 TDE),在不更改应用程序的情况下满足要求要容易得多,而且效果要好得多。

【讨论】:

  • 我假设在连接字符串中指定“Encrypt=yes”是第 1 条说“客户端请求加密”时的意思?因此,为了澄清,如果我没有直接在服务器机器上安装的证书,那么指定“Encrypt=yes”的连接字符串将失败?但是如果我确实有这个证书,那么只在连接字符串中使用它就可以进行加密传输?
  • Encrypt=yes 表示客户端请求加密,true。服务器将使用它用于客户端连接的当前证书。客户端是否信任此证书是一个更复杂的问题。如果客户端应用程序从您的管理控制之外的主机连接,则服务器必须使用由受信任的根授权(例如 VeriSign)签署的证书。如果客户端主机在您的控制之下,则存在其他(更便宜的)选项,因为您可以在客户端主机(即公司 PKI)上部署额外的信任根。
  • 非常感谢。 :) 那么,为了确定,没有证书就没有办法使用加密吗?
  • 证书和 SSL 是您的最佳选择。
【解决方案3】:

我对您的要求有点困惑。您需要在本地加密数据,还是要加密您的应用程序和服务器之间的连接?还是存储在数据库表中的数据?还是两者的组合?

无论如何,对于连接的加密(包括身份验证),您可能需要查看 SQL Server 的通道加密功能。 http://blogs.msdn.com/b/sql_protocols/archive/2005/10/04/476705.aspx

对于本地文件或连接字符串以及二进制数据加密(也可能以加密形式存储在数据库中),查看 System.Security.Cryptography 命名空间是可行的方法。

【讨论】:

    猜你喜欢
    • 2010-09-07
    • 2011-10-28
    • 1970-01-01
    • 2023-04-06
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2019-08-30
    相关资源
    最近更新 更多