【问题标题】:Encrypt in SQL Server / Decrypt in .Net 4在 SQL Server 中加密/在 .Net 4 中解密
【发布时间】:2011-09-23 09:12:46
【问题描述】:

我知道这可能是这个问题的重复:How to encrypt data in sql server and decrypt it in .net apps - 但这是大约一年前提出的问题,我希望可能会有进步或其他什么。

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

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

这可能吗?

从我的谷歌搜索来看,似乎不是,但我希望有人有窍门之类的。

提前致谢!

注意:我使用的是 .Net 4 和 SQL Server 2008 R2。

【问题讨论】:

  • +1 明确指出有一个类似但太老的问题。

标签: c# sql-server ftp encryption


【解决方案1】:

使用 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 加密兼容性的问题。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 密码原本是存储在数据库中的,不是来自应用程序,所以不适用!
    【解决方案3】:

    【讨论】:

      【解决方案4】:

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

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

      我在我的书架上放了一份this 的副本已经有一段时间了,但从来没有深入研究过——主要是因为,虽然原则上非常酷——我从来没有发现“需要”使用 SQLCLR。然而,你的问题听起来像是一个强有力的候选人:-)

      HTH :-)

      达米安

      【讨论】:

      • -1 “世界上到处都是由阅读应用密码学的人设计的糟糕的安全系统”。这只是一个糟糕的建议,它完全忽略了密钥管理的问题,并忽略了 T-SQL 加密函数使用未记录的存储格式导致 IV 和密码文本不可用的事实。
      猜你喜欢
      • 2011-04-29
      • 2011-01-10
      • 2021-10-05
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 2020-09-12
      • 2011-07-11
      相关资源
      最近更新 更多