【发布时间】:2015-07-26 19:58:26
【问题描述】:
我正在处理几个需要为第三方应用程序存储用户凭据的项目,例如 Paypal、Facebook 开发人员凭据等。我已经阅读了几本关于不同类型编码的书籍,包括 ASP.NET 、WPF、jQuery 等都有很好的例子说明如何使用自己的秘密访问上述服务,而且它们都使用了确切的短语“在实际项目中,您会将这些存储在加密文件中”。没有,但是,请举例说明如何做到这一点。
我在加密方面几乎没有(阅读:没有)经验,但根据我的理解,我需要使用某种密钥(盐?)加密用户名和密码并将它们保存在文件中。我还希望能够在我的应用程序上使用这些凭据,因此我需要将密钥(盐?)存储在我的代码中。
现在我的问题是:如何更安全将仍然是纯文本的解密密钥存储在程序代码中,而不是实际的凭据?
难道恶意用户一拿到密钥就不能解密我的密码文件吗?
--编辑--
我的意思是我需要存储我自己的凭据以登录第三方应用程序,而不是我的用户的凭据。例如,我需要向 Google 表明我的身份和/或我的应用,以便用户可以使用他们自己的 Google 帐户登录我的应用。
--编辑2--
澄清一下,这就是我要说的。此截图来自 asp.net PayPal 教程:
这里有关于良好做法的快速指示吗?
【问题讨论】:
-
您列出的两个第三方应用程序(Facebook 和 Paypal)明确禁止您收集凭据。您需要将用户引导至其 API 的 OAuth 登录页面,并保存他们登录时提供的令牌。
-
我说的不是用户凭据,而是我自己的。我需要向 PayPal 表明自己的身份,这样钱才能到我手上等等。我需要很多服务,希望我登录才能使用我支付的服务。我想我的网络应用应该能够做到这一点,而无需我每次用户登录时都输入用户名。
-
@MirjalalTalishinski 滚动自己的加密(又名“默默无闻的安全”)是一个极其危险的建议。一个有足够动力的黑客破解你的算法的速度比破解一个众所周知的、经过广泛测试的加密系统的密钥要快得多。
-
@MirjalalTalishinski 我不认为你在讽刺,这绝对是可怕的建议。请阅读 security.stackexcange.com 问题Why shouldn't we roll our own?
-
@MirjalalTalishinski 这就是问题所在。你认为它是安全的,但你不知道它是安全的。编写一个无法破解的密码系统非常容易。编写一个密码系统是非常困难的,其他人每天都在做这件事,无法破解。请实际阅读我发布的链接,您将自己置于您没有意识到的风险中。
标签: c# encryption credentials storing-information