我是 C# 和 ASP.NET 的新手,我现在必须做一个项目。它处理公司员工的机密数据,因此需要对其进行加密。我不确定我是否能够使用我自己的加密算法。如果我使用任何现有的算法,他们说我应该找到一种万无一失的方法来存储密钥。
老实说,我不太了解加密中的“密钥”一词。我希望有人简要介绍一下,并帮助我了解如何推进这个项目。
我是 C# 和 ASP.NET 的新手,我现在必须做一个项目。它处理公司员工的机密数据,因此需要对其进行加密。我不确定我是否能够使用我自己的加密算法。如果我使用任何现有的算法,他们说我应该找到一种万无一失的方法来存储密钥。
老实说,我不太了解加密中的“密钥”一词。我希望有人简要介绍一下,并帮助我了解如何推进这个项目。
http://en.wikipedia.org/wiki/Key_%28cryptography%29
不知道,但也许从那里开始?
密码学的第一条规则——永远不要使用自己的算法,除非你是博士。和其他几个博士正在帮助你,即使那样,只有在公共审计后才能使用。
他们存储密钥的意思是它不应该暴露在任何地方——如果攻击者可以获得密钥,他们就可以解密数据库中的所有数据。目前,没有已知的方法可以做到这一点。您可以将密钥存储在网站根文件夹之外的文件中 - 这样,服务器本身必须受到威胁,您的应用程序必须受到威胁(例如,通过使其显示“../../key.txt”文件,因此下降到 webroot 之下)或者您的应用程序必须被诱骗为攻击者透明地加密/解密数据(例如,通过存在允许绕过身份验证的错误,从而允许他们使用您的应用程序与数据库对话)。
对于问题的最后一部分,请使用@Haxx 的答案 :)
恕我直言:
正如已经建议的那样,不要拼凑你的“自己的”,使用已经过广泛测试的框架中的现有算法。无论他们可能有什么弱点(可能)仍然比你自己拼凑起来的要好。
了解需要加密的内容,这几乎意味着在某些时候需要解密与需要散列的数据(单向 - 例如密码)。
决定您是否希望在应用程序端发生这种情况,或者,如果资源可供您使用,如 SQL 服务器(用于存储数据),则在数据库端(与您的 DBA 讨论)。您可以单独在 SQL Server 中进行加密和散列。
在应用程序方面,您可以考虑将密钥存储在您的web.config
部分并随后加密该部分 - 就像为您的数据库连接字符串执行此操作的选项(加密 web.config 的连接部分)一样。这样,即使您的密钥也不是纯文本。