在.Net 4中加密SQL Server / Decrypt

时间:2011-06-27 09:50:43

标签: c# sql-server ftp encryption

我理解这可能是这个问题的重复:How to encrypt data in sql server and decrypt it in .net apps   - 但这是在差不多一年前被问到的,我希望可能会有进步或其他什么。

无论如何,我们有一个应用程序,FTP文件从一个位置到另一个位置,显然FTP配置文件需要密码。我们有一个包含配置文件所有详细信息的数据库,但我们需要加密密码。我们曾想过在SQL中解密它们然后将它们发送到应用程序,但这意味着通过网络发送它,这是我们不想要的。

我们要加密存储的密码,将详细信息传递给应用程序,然后在应用程序中解密它们。

这可能吗?

从我的谷歌搜索,它似乎不是,但我希望有人有窍门或其他。

提前致谢!

注意:我正在使用.Net 4和SQL Server 2008 R2。

4 个答案:

答案 0 :(得分:6)

使用SQL Server列加密API函数(如EncryptByKey)的加密和解密与任何客户端加密或解密都不兼容,因为它使用内部的,未记录的存储格式。

我想说,由于SQL Server提供了网络连接机密性,因此您不担心通过网络发送密码,请参阅Encrypting Connections to SQL Server

您最好的选择是将密码存储在加密列中,并使用内置的SQL Server加密函数(EncryptByKeyDecryptbyKey)或使用Transparent Database Encryption。标准也选择一个或另一个主要是许可要求(TDE要求企业版),因为TDE在每个方面都优于列级加密。无论您选择何种解决方案,您都会很快意识到主要问题是密钥管理,并且SQL Server提供了一个可行的故事,请参阅Encryption Hierarchy。无论您如何设计解决方案,都不需要应用程序加密或解密密码本身,如果您需要,那么您显然是错误的路径(因为应用程序无法管理密钥本身),所以应该永远不会出现CLR加密和SQL加密兼容性问题。

答案 1 :(得分:1)

Simpy对.net中的密码进行加密和解密,就SQL而言,它只是存储文本。

答案 2 :(得分:1)

答案 3 :(得分:0)

在我看来,“明显的答案”是你需要在SQL服务器和dotNet中使用相同的算法(或适当的匹配加密/解密对)。因为前者使用T-SQL而后者是C#/ VB之类的托管代码语言,所以你必须用不同的语言编写/获取算法的两半。育。

您是否考虑过使用SQL CLR?这样你就可以在C#中编写两个部分,并从SQL运行该代码。

我有this的副本坐在我的架子上一段时间但从来没有深入研究过 - 主要是因为,虽然本身非常酷 - 我从来没有发现'需要'使用SQLCLR。然而,你的问题听起来像是一个强有力的候选人: - )

HTH: - )

达米恩