简而言之,我如何安全地存储密码以备日后使用。
我正在使用python 3,我的程序需要跨平台。
答案 0 :(得分:2)
听起来你需要钥匙圈:https://pypi.python.org/pypi/keyring
答案 1 :(得分:1)
您无法获取用户登录计算机时使用的密码。
而且,如果可以的话,你不会想要存储它。
事实上,操作系统甚至没有用户的密码。操作系统有一个哈希,当用户登录时,它会散列用户键入的内容并检查它是否匹配。
此外,如果您要求用户使用系统密码登录,任何精明的用户都会立即不信任您的应用并拒绝使用它。让他们创建一个密码,然后使用 登录,而不是他们的系统密码。并且不要保存密码,保存哈希,就像操作系统一样。
如果您想验证它们是否已经过操作系统的身份验证...那么,您已经知道,或者他们无法登录以运行您的应用。 (如果你正在构建一个允许基于本地帐户进行远程登录的网络服务器,这是一个不同的故事,但它与你的用例无关,而且很复杂,所以我不会在这里介绍它。)
如果您想允许某人“保持登录状态”,则不要通过保存密码来执行此操作。相反,您在登录时会创建某种难以伪造的“会话密钥”,并将其存储在某处。在销毁会话密钥(您在注销时执行此操作)之前,他们不必再次登录。
“永不存储密码”的一个例外是当您需要将用户的“代理”作为需要其密码的其他应用程序时。精心设计的应用程序将为您提供正确代理登录的方法,但许多应用程序设计不合理。 Web浏览器必须一直这样做,这就是为什么大多数Web浏览器都有“在此站点记住我的密码”复选框。
在这种情况下,您确实希望存储密码,理想情况下由操作系统代表您加密(例如,使用OS X的Keychain API),或者,如果不是,则使用从用户的“主密码“(你没有存储)。
不幸的是,没有真正的快捷方式来学习如何设计安全性 - 或者说,有各种各样的快捷方式,并且采用其中任何一种都意味着整个系统最终不安全以及您尝试的所有工作确保它最终无用。
简单的解决方案是使用完整的现成解决方案。
如果您想自己设计,至少需要在所有问题上都有基础。从Bruce Scheneier的一本“流行”书开始, Secrets and Lies 或 Beyond Fear 。然后在设计密码系统时阅读他的 Practical Cryptography ,并在评估加密算法时阅读 Applied Cryptography 。然后,一旦你意识到你不知道多少以及它有多重要,就要学习你所需要的一切,然后你就可以考虑解决它。
答案 2 :(得分:1)
没有出路。如果应用程序没有要求用户输入密码,那么它不会安全地存储密码,它只会做......“事情”。在这种情况下,不要给用户一种虚假的安全感,请使用明文。
一个值得注意的例外是GNOME登录密钥环(以及其他平台上的等价物)没有要求输入密码,但它使用了一个技巧:它使用您的登录密码对数据进行加密,并在启动时输入密码对其进行解密。
如果您正在使用本地客户端开发Web应用程序,请考虑使用OAuth而不是密码。