我需要使用密码来登录服务 我需要在 Python 中做一些事情,但我不想将密码存储在代码中。
我做了一些研究,发现了base64编码。这看起来不错,但它无论如何都需要将密码存储在代码中。
>>> import base64
>>> encoded = base64.b64encode('data to be encoded') # password stored in the code
>>> encoded
'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
'data to be encoded'
对于已经在Python中使用过密码管理的人来说,最好的选择是什么?将密码存储在文件中?仅使用生成的b64encode()
字符串并解码它,程序需要密码?
我只能假设您正在谈论将您的凭据存储到站点,用户无法为自己注册?
最正确的方法是不这样做。 在程序中存储凭据通常不是很安全,想要(并知道如何)的人将能够获得这些凭据
对于避免在代码中存储凭据的解决方案,您可以创建一个中间件服务器,用于存储用户注册的单个用户凭据,然后将站点凭据存储在该服务器上,以便用户访问中间件中的端点,然后使用您的登录凭据对站点执行查询并逐字返回输出。 然而,这也是一个相当困难的解决方案。 但是,如果您要将其分发给不受信任的用户,并且您认为保护第三方凭据非常重要,这实际上是您唯一的选择。
另一种选择是允许用户直接在第三方站点注册自己的用户名/密码(您甚至可以自动化它),然后提示用户输入他们的唯一凭据并将其存储在用户主目录中或其他东西中(如果需要,请加密/编码......
根据您的编辑,我相信以下内容可能适用于您的用例如果您要将其分发给一个非常小的受信任组,或者您找到了一种方法来不太关心人们是否从程序中获取凭据,则有很多方法可以在代码本身中编码/加密/混淆您的密码。 包括 base64 编码它,或 AES 加密它,将其分解成几个地方。 所有这些都会阻止人们扫描代码以获取密码的最常见方式(但一个坚定的人肯定能够恢复它)
不要在程序中嵌入密码(明文或模糊码)。 相反,允许用户在文件中提供密码。 这是标准FTP和MySQL客户端等程序采用的方法。
对于奖励积分,请检查文件是否不能被其他非 root 用户读取(最好不要写入或替换)。 如果是这样,请退出并显示错误消息,以便用户必须修复它。
请注意,您的内存中将有一个有价值的密码 - 请考虑在使用后尽快覆盖,因此它不会出现在任何核心文件中。
如果您的平台具有合适的密钥环实现,则可以考虑使用 Python 密钥环包。