在计算机上保存密码以使其无法被访问的最佳方法是什么?我想将它们加密存储在注册表中。我希望您能够重置密码,但这不适用于服务器。这是为了将它们存储在计算机上以记住它们并自动登录。
重要编辑:我需要能够从程序内检索纯文本密码,而不是其他任何地方。
加密保护数据 http://msdn.microsoft.com/en-us/library/aa380261%28v=vs.85%29.aspx and 加密解除数据保护 http://msdn.microsoft.com/en-us/library/aa380882%28v=vs.85%29.aspx是您在 Windows 上的最佳选择。他们使用登录凭据对数据进行加密,因此密码不会受到磁盘攻击。但是,同一用户下运行的任何程序都可以访问它们。我建议将它们存储在一个文件中,该文件的权限阻止其他程序访问它们(例如需要管理员权限才能访问的文件)。
托管类受保护的数据 http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx使用这些函数,因此可以从 C# 中使用它。
您还可以使用 P/Invoke 直接使用这些函数。有一些示例代码可以做到这一点here http://www.obviex.com/samples/dpapi.aspx.
为满足额外要求而进行扩展:
有一种方法可以确保您的程序是唯一能够访问密码的程序,而无需以管理员权限启动您的程序,尽管这需要做更多的工作。
基本思想是:创建一个 Windows 服务,该服务在安装应用程序时安装。当您的应用程序想要存储/检索用户密码时,应根据需要启动它。该服务将仅提供对具有权限设置的文件的读/写访问权限,以便只有管理员才能读/写它。额外的安全性来自于进程的 IPC 连接,该连接将使用命名管道 http://msdn.microsoft.com/en-us/library/windows/desktop/aa365590%28v=vs.85%29.aspx。然后你可以使用获取NamedPipeClientProcessId http://msdn.microsoft.com/en-us/library/windows/desktop/aa365440%28v=vs.85%29.aspx(抱歉,您需要 P/Invoke)通过查找连接到管道的客户端的进程 ID 来验证请求。
根据您对安全性的担忧程度,如果您有权访问有效证书,则可以使用代码签名来验证进程 ID。或者,您可以验证可执行文件的校验和或类似性质的内容。
这是我能想到的在 Windows 上创建您所寻求的安全性的唯一方法。您的应用程序还应该在将数据移交给 Windows 服务之前使用 ProtectedData 来加密数据,以防止硬盘攻击。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)