c# - 在 ASP.Net 应用程序中安全地存储(加密)数据

标签 c# asp.net sql encryption x509certificate

我有一个 asp.net 应用程序,人们可以使用 Web 浏览器通过 Internet 访问该应用程序。它在网络服务器上运行,并与后端数据库对话。

一些用户希望使用该应用程序来存储一些私有(private)数据。其要求是:

1) 只有存储数据的用户才能看到它。

2) developers/dbas 不应该看到数据。

3) 如果网络服务器和数据库服务器遭到破坏,黑客一定无法解密数据。

所以,很明显我必须加密这些数据。如果我加密它,某处会有一个 key ,可能是一个 salt/IV。问题是我在哪里存储用于执行解密的数据?如果我将它存储在数据库或 Web 服务器中,那么开发人员、数据库管理员或黑客就可以访问它并解密数据。

我认为我对此的理想解决方案是将私钥放在客户端机器上,这样他们就完全负责。但是我不确定如何使用 asp.net web 应用程序来解决这个问题。

我相信我可以创建一个还存储私钥 (PFX) 的证书。客户公司可以使用组策略将证书部署到他们的域。但是 ASP.Net 应用程序可以请求 Web 浏览器将私钥发送给它以便它可以执行解密吗?在客户端解密是最好的,但除了在 javascript 中创建一些东西之外,我看不出这是怎么可能的。

欢迎任何建议。

最佳答案

将 key 存储在用户的脑海中。使用您喜欢的任何基于密码/密码的 key 派生算法。标准是PBKDF2 .算法的最佳选择将完全取决于您的安全要求和威胁模式。理想情况下,该决定和实现至少应由安全专家审查。

关于c# - 在 ASP.Net 应用程序中安全地存储(加密)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7745385/

相关文章:

javascript - 如何在 ASP.NET C# 中检测到控件被单击 OnClientClick?

c# - 如何在输出之前修改整个 ASP.NET 页面内容?

asp.net - 如何在 Eval 格式字符串中使用单引号

c# - LINQ子查询 "NOT IN"问题

c# - C#中如何判断一个线程是否繁忙?

javascript - SWFUpload ASP.Net 示例站点不工作?

sql - 替换 T-SQL 中的 Unicode 字符

mysql - 在 SQL 中使用 UNION 调用嵌套 INNER JOIN - 相当迷茫

c# - 验证表单关闭无限循环

c# - IInvokeProvider 命名空间?