存储网络服务的密码?

Posted

技术标签:

【中文标题】存储网络服务的密码?【英文标题】:Storing a password for a webservice? 【发布时间】:2015-06-15 02:25:31 【问题描述】:

我正在使用需要用户名和密码才能登录的网络服务。 Web 服务将由桌面应用程序使用。我应该如何存储密码以及用户名?通常,您似乎会将密码与盐一起存储在数据库中,但在这种情况下,我用来访问 Web 服务的库接受纯文本的用户名和密码(并且 不是加密版本),但使用 SSL 连接到实际的 Web 服务。

这根本不是我的专业领域,在将密码传递给库中的方法之前我应该​​如何解密?

【问题讨论】:

你不能。您需要将其存储在为您提供明文密码的表单中。 这似乎非常不安全...... 也许我不理解这种情况,但如果您的 Web 服务需要纯文本形式的凭据。您可以将其加密存储在配置文件中,当您需要调用 Web 服务时,从配置中解密凭据并调用它。 是的,我就是这个意思。你不能散列它,你必须加密它,这样桌面应用程序才能解密它。 使用不同的网络服务,因为它“非常不安全”。 【参考方案1】:

您忽略了这是否仅适用于您,或者您是否正在将软件分发给其他人。

您担心的威胁是什么?

如果它只适合你:

将其写在一张纸上,并将该纸保存在您的wallet 中。需要时提示输入密码。

密码变量应该是 SecureString 而不是字符串,这样它就不会被拦截。

如果您不想将其存储在钱包中,请使用公钥加密密码,并将私钥保存在智能卡中,并使用智能卡解密密码。

如果您不想使用智能卡,请使用DPAPI。

【讨论】:

【参考方案2】:

我发现在类似情况下对我很有效的一件事是使用 AES 加密用户名和密码,这样凭据可以在文件中修改,但肉眼无法读取。

为了使其更复杂,您可以使用不同的键和向量通过多次传递来运行它。

我在这里用过这个人:SO: SimpleAES encryption

当然,如果用户获得密钥和向量并通过自己的解密运行它,则可以逆转,但至少在这种情况下,您可以将加密的字节数组存储为 base64 或将其写入文件。

【讨论】:

以上是关于存储网络服务的密码?的主要内容,如果未能解决你的问题,请参考以下文章

PHP - 安全地存储外部服务的密码?

服务器/数据库配置文件,包括密码,是不是应该存储在源代码控制中?

Web服务的用户身份验证 - 存储在客户端密码

通过 SOAP 服务向 JIRA 进行身份验证时安全密码存储

存储自动登录密码的正确方法

网络凭证的用户名和密码在哪