数据如何加密在使用.NET传递到SQL服务器并解密以在.NET应用程序中使用之前

时间:2017-01-07 18:35:18

标签: c# mysql asp.net sql-server

我有一个像这样的客户表

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

我需要在传入SQL Server之前加密数据并解密相同的数据,以便在.NET开发的应用程序中使用,例如Windows窗体,Asp.Net甚至MVC应用程序。

我需要将带有加密文件的数据传输到我的应用程序以及数据库中。我需要在传输过程中以及在SQL服务器中保存数据时保证数据的安全。

1 个答案:

答案 0 :(得分:1)

阿伦,

我知道您希望您的数据在用户使用时被解除类型,但在所有其他点保持加密状态?这与通常用于处理系统内密码的要求相同,除了密码通常是破坏性加密的。

这将为您带来严峻挑战。您将无法使用任何报告工具或汇总数据库查询,因为无论何时使用,您都需要解密受保护的数据,并且解密将是系统中的一个重要安全节点,其实现和访问权限尽可能少。

最终,您的数据需要在使用时进行解密。解密必须基于“用户是谁” - 即必须基于他们通过您的其他身份验证过程获得的权限 - 登录,计算机白名单,DNS,AD等等。这意味着您的所有端点应用程序必须得到适当的保护。这也意味着他们一定不能妥协。因此,您必须使用SSL进行所有通信。您还必须为您的应用程序提供防弹认证机制(只是散列用户密码不够好 - 您需要多层种子和分层散列算法)。因此,除非您知道如何执行所有这些操作,否则请坚持使用Active Directory / Azure AD等操作系统身份验证或基于SAML的某种联合身份验证。

这里的原理是数据从用户输入数据时尽快加密,并且在其对另一个授权用户实际可见之前不会被解密。您不需要关心SQL Server加密等,因为在用户想要查看之前它永远不会被解密 - SQL Server只会看到一个字节列表。

选择您选择的对称或PSK加密算法 - 但绝不试图自己编写一个。使用该算法在用户输入后立即加密,使用从中央服务获得的PSK / SK(Web服务将是最佳方式),但仅限于授权个人(Web服务必须拒绝提供密钥未经授权的个人)加密您的数据并以常规方式存储和处理它。检索它时,将其加密发送到客户端应用程序 - 让客户端应用程序从服务中检索必要的解密密钥,并在使用时解密。

记住最好的crypt / decrypt算法将需要一个“种子”,这通常对于数据库中的每个记录都是不同的,并且可能来自所讨论的记录中的一些其他未加密的值。例如,用于密码加密/哈希的种子可以是用户姓氏的第一个字母的ASCII值,或者是其他静态数据的哈希的一些eosoteric组合(如记录的GUID)。

同样,这可以防止任何批量解密尝试,并使一个解密密钥的猜测非常局限于它所属的单个记录。当然,它会产生副作用,使您的数据在整个应用程序中几乎完全无法读取 - 这是您似乎想要实现的,但可能没有意识到它的影响。