将凭据存储在加密文件中

时间:2015-07-26 19:58:26

标签: c# encryption credentials storing-information

我正在开发一些需要为第三方应用程序存储用户凭据的项目,例如Paypal,Facebook开发者信誉等。我已经阅读了一些关于不同类型编码的书籍,包括ASP.NET ,WPF,jQuery,以及所有关于如何使用自己的秘密访问前面的服务的好例子,并且所有这些例子都使用了真实项目中的确切短语“,你将它们存储在加密文件中”。但是,没有人举例说明如何这样做 我有很少的(读取:无)加密经验,但根据我的理解,我需要使用某种键(salt?)加密用户名和密码并将它们保存在文件中。我还希望能够在我的应用程序上使用这些凭据,因此我需要将密钥(salt?)存储在我的代码中。
现在我的问题是:如何在程序代码中存储解密密钥(仍为纯文本)比实际凭证更安全?
一旦获得密钥,恶意用户是否能够解密我的密码文件? - 编辑 -
我的意思是我需要存储的自己的凭据才能登录到第三方应用程序,而不是我的用户凭据。例如,我需要向Google标识自己和/或我的应用,以便用户可以使用自己的Google帐户登录我的应用。
--EDIT 2-- 澄清一下,这就是我所说的。这个截图来自asp.net PayPal教程: enter image description here 有关良好做法的快速指示吗?

2 个答案:

答案 0 :(得分:2)

您误解了存储加密密码 * + salt的部分:这是在您的系统需要验证其他人的凭据时完成的。在这种情况下,存储密码哈希和盐比存储加密与否的凭证更安全,因为攻击者无法获得密码,即使他设法得到哈希和盐。

以纯文本格式存储解密密钥永远不是一个好的选择,因为攻击者只要能够访问密钥就会获得用户的密码。

没有很好的解决方案来保存您自己的凭据,无论是否加密。与第三方服务对话的组件应使用这些提供程序的开发人员API。例如,您可以使用PayPal provides two sets of APIs访问您的帐户,而无需存储密码。

如果您需要以加密形式存储少量机密信息,请使用注册表API将数据存储在应用程序已知的密钥中,并可从运行服务器端组件的用户访问。只要黑客不破解运行您服务的帐户的密码,这个秘密就是安全的。

* 从技术上讲,密码未加密,它是经过哈希处理的,即没有可靠的方法将转换结果恢复为原始值。

答案 1 :(得分:1)

你的怀疑是正确的。如果用户有权访问密钥,他们可以自己去解密用户名和密码。

您拥有的两个选项是

  1. 很难获得密码,获取密码的重复信息不值得找到它。这种方法是通过Code Obfuscateors之类的东西完成的,我不建议这个人开始使用。要做到这一点并不容易,只需要一个人就可以“花费精力”让它破碎。

  2. 不要向用户提供有关信息。程序将程序调用到您拥有的服务器,而不是在程序中存储用户名和密码,然后该服务器就是使用凭据进行请求的原因。这种方法更可靠,并且“牢不可破”(只要您的服务器是安全的)但成本更高,因为您现在需要保持服务器启动并运行,以便处理整个用户群的负载。

    < / LI>