关于C#:密码检索和存储

Password retrieval and storage

在我的应用程序中,我必须重复调用需要身份验证的WebServices。用户不希望重复输入身份验证信息(用户名和密码)。

是否有一种安全的方法可以至少在应用程序运行的会话长度内存储密码,因此用户只需输入一次数据?

目前,我将密码保存在内存中,在输入密码后对其进行加密,并在用于服务调用时对其进行解密。但是我觉得有点不舒服。这是处理此类数据的推荐方法吗?

在数据库中存储一个密码,以便在多个会话中使用它呢?有没有建议的处理方法?我听说过bcrypt和pbkdf2。但它们只是为了散列的目的和比较输入的密码,而不是再次使用"解密"的密码。

或者使用外部密码缓存,比如keepass(或者其他可以使用的方法),是更好的方法。


对于内存存储,请使用SecureString类或NetworkCredentials,后者在内部使用SecureString。

对于持久存储,请使用数据保护API加密密码。它将使用此计算机上当前Windows用户只能访问的密钥对其进行加密。