如何安全保存用户名/密码(本地)?

我正在制作Windows应用程序,您需要先登录。

帐户详细信息包含用户名和密码,它们需要保存在本地。

这只是安全问题,因此使用同一台计算机的其他人看不到每个人的个人数据。

保存此数据的最佳/最安全的方法是什么?


我不想使用数据库,所以我尝试了一些与资源文件有关的事情。

但是,由于我对此很陌生,因此我不确定自己在做什么以及应该在哪里寻找解决方案。


茅侃侃
浏览 1399回答 3
3回答

烙印99

如果您只是要验证/验证输入的用户名和密码,请使用Rfc2898DerivedBytes类(也称为基于密码的密钥派生功能2或PBKDF2)。这比使用诸如Triple DES或AES之类的加密方法更安全,因为没有实际的方法可以将RFC2898DerivedBytes的结果返回到密码。您只能从密码转到结果。请参阅从密码字符串派生加密密钥和IV时,可以将SHA1密码哈希用作盐吗?有关.Net或字符串的示例和讨论,请使用密码c#Metro Style for WinRT / Metro 进行加密/解密。如果您要存储密码以供重复使用,例如将其提供给第三方,请使用Windows数据保护API(DPAPI)。它使用操作系统生成和受保护的密钥以及三重DES加密算法来加密和解密信息。这意味着您的应用程序不必担心生成和保护加密密钥,这是使用加密技术时的主要问题。在C#中,使用System.Security.Cryptography.ProtectedData类。例如,要加密一条数据,请使用ProtectedData.Protect():// Data to protect. Convert a string to a byte[] using Encoding.UTF8.GetBytes().byte[] plaintext; // Generate additional entropy (will be used as the Initialization vector)byte[] entropy = new byte[20];using(RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()){    rng.GetBytes(entropy);}byte[] ciphertext = ProtectedData.Protect(plaintext, entropy,    DataProtectionScope.CurrentUser);安全地存储熵和密文,例如在设置了权限的文件或注册表项中,这样只有当前用户才能读取它。要访问原始数据,请使用ProtectedData.Unprotect():byte[] plaintext= ProtectedData.Unprotect(ciphertext, entropy,    DataProtectionScope.CurrentUser);请注意,还有其他安全注意事项。例如,避免将诸如密码之类的机密存储为string。字符串是不可变的,因为无法在内存中通知它们,因此查看应用程序内存或内存转储的人可能会看到密码。请改用SecureString或byte [],并记住在不再需要密码时立即进行处理或清零。

慕雪6442864

DPAPI仅用于此目的。用户首次输入密码时,请使用DPAPI加密密码,并将其存储在安全的位置(用户注册表,用户应用程序数据目录,是一些选择)。每当启动该应用程序时,请检查位置以查看您的密钥是否存在,是否使用DPAPI对其进行解密并允许访问,否则将其拒绝。
打开App,查看更多内容
随时随地看视频慕课网APP